android开发中,apk文件安装到\system\app 的解决办法 仅限root机
2014-11-01 18:49
661 查看
原文地址 http://zhidao.baidu.com/question/206374215.html
在 Android 中,如果要使用系统限制的权限(比如 android.permission.WRITE_SECURE_SETTINGS),我们需要把程序安装到 /system/app/ 下。 下面以 SecureSetting.apk 为例,演示这个操作。需要准备一台已经获得 Root 权限的手机。 1、通过 USB 连接手机和电脑。 2、使用 adb 控制手机。 源码打印? 1. $ adb push SecureSetting.apk /sdcard/ // 上传要安装的文件,为安装做准备。 2. $ adb shell 3. $ su // 切换到 root 用户。如果没有获得 Root 权限,这一步不会成功。 4. # mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system // 让分区可写。 5. # cat /sdcard/SecureSetting.apk > /system/app/SecureSetting.apk // 这一步可以用 cp 实现,但一般设备中没有包含该命令。如果使用 mv 会出现错误:failed on '/sdcard/NetWork.apk' - Cross-device link。 6. # mount -o remount,ro -t yaffs2 /dev/block/mtdblock3 /system // 还原分区属性,只读。 7. # exit 8. $ exit $ adb push SecureSetting.apk /sdcard/ // 上传要安装的文件,为安装做准备。 $ adb shell $ su // 切换到 root 用户。如果没有获得 Root 权限,这一步不会成功。 # mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system // 让分区可写。 # cat /sdcard/SecureSetting.apk > /system/app/SecureSetting.apk // 这一步可以用 cp 实现,但一般设备中没有包含该命令。如果使用 mv 会出现错误:failed on '/sdcard/NetWork.apk' - Cross-device link。 # mount -o remount,ro -t yaffs2 /dev/block/mtdblock3 /system // 还原分区属性,只读。 # exit $ exit 重启,可以看到 SecureSetting 已经安装好。
补充,如果要实现将自己的apk直接安装到/system/app/,则需要先写一个installer.apk,在里面执行shell将主要apk通过cat的方式写入/system/app,再用chmod修改权限,然后执行reboot就行了
附上java执行shell的代码:
public final class RootCmd { // 执行linux命令并且输出结果 protected static String execRootCmd(String paramString) { String result = "result : "; try { Process localProcess = Runtime.getRuntime().exec("su ");// 经过Root处理的android系统即有su命令 OutputStream localOutputStream = localProcess.getOutputStream(); DataOutputStream localDataOutputStream = new DataOutputStream( localOutputStream); InputStream localInputStream = localProcess.getInputStream(); DataInputStream localDataInputStream = new DataInputStream( localInputStream); String str1 = String.valueOf(paramString); String str2 = str1 + "\n"; localDataOutputStream.writeBytes(str2); localDataOutputStream.flush(); String str3 = null; // while ((str3 = localDataInputStream.readLine()) != null) { // Log.d("result", str3); // } localDataOutputStream.writeBytes("exit\n"); localDataOutputStream.flush(); localProcess.waitFor(); return result; } catch (Exception localException) { localException.printStackTrace(); return result; } } // 执行linux命令但不关注结果输出 protected static int execRootCmdSilent(String paramString) { try { Process localProcess = Runtime.getRuntime().exec("su"); Object localObject = localProcess.getOutputStream(); DataOutputStream localDataOutputStream = new DataOutputStream( (OutputStream) localObject); String str = String.valueOf(paramString); localObject = str + "\n"; localDataOutputStream.writeBytes((String) localObject); localDataOutputStream.flush(); localDataOutputStream.writeBytes("exit\n"); localDataOutputStream.flush(); localProcess.waitFor(); int result = localProcess.exitValue(); return (Integer) result; } catch (Exception localException) { localException.printStackTrace(); return -1; } } // 判断机器Android是否已经root,即是否获取root权限 protected static boolean haveRoot() { int i = execRootCmdSilent("echo test"); // 通过执行测试命令来检测 if (i != -1) { return true; } return false; } }
[/code]
相关文章推荐
- android开发中,apk文件安装到\system\app 的解决办法 仅限root机
- Android驱动开发【NDK模型】———NDK程序设计之产生头文件出现找不到appcompat-v7的错误解决办法
- Android开发中,使用线程下载apk文件,出现FileNotFound的问题,解决办法
- 通过mk文件编译android4.0.3系统app源码后覆盖安装失败解决办法(android odex文件)
- 通过mk文件编译android4.0.3系统app源码后覆盖安装失败解决办法(android odex文件)
- android从内部存储写入、安装apk提示解析包错误,或者提示Permission Denied,文件不可用解决办法
- Android安装包apk文件在某些版本操作系统上安装解析包出错问题的解决办法
- Android插件化开发之用DexClassLoader加载未安装的APK资源文件来实现app切换背景皮肤
- android从内部存储写入、安装apk提示解析包错误,或者提示Permission Denied,文件不可用解决办法
- Android开发实践经验谈:如何让各式手机浏览器可以直接下载apk安装文件且实现自动安装APP
- Android apktool反编译资源文件为空解决办法(测试天猫、淘宝等apk成功)
- Unity3d导出Android的apk文件时相关问题的解决办法
- 在Android上开发带数字签名的APK安装文件
- Android 使用系统限制的权限的apk应安装到 /system/app 目录下
- 用eclipse开发android app,自动补齐时很慢很卡的解决办法(转帖)
- 使Android的system分区可写及安装apk到system/app
- 图文并茂 在MyEclipse 8.6上搭建Android开发环境+MyEclipse8.5 无法安装ADT解决办法
- android apk文件在模拟器上运行正常,在真机中出现解析包错误解决办法集锦
- android开发中应用程序未安装解决办法
- 在Android上开发带数字签名的APK安装文件