android开发中,apk文件安装到\system\app 的解决办法 仅限root机
2013-12-20 17:00
726 查看
原文地址 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; } }
相关文章推荐
- android开发中,apk文件安装到\system\app 的解决办法 仅限root机
- Android开发中,使用线程下载apk文件,出现FileNotFound的问题,解决办法
- Android插件化开发之用DexClassLoader加载未安装的APK资源文件来实现app切换背景皮肤
- android从内部存储写入、安装apk提示解析包错误,或者提示Permission Denied,文件不可用解决办法
- android从内部存储写入、安装apk提示解析包错误,或者提示Permission Denied,文件不可用解决办法
- Android驱动开发【NDK模型】———NDK程序设计之产生头文件出现找不到appcompat-v7的错误解决办法
- Android安装包apk文件在某些版本操作系统上安装解析包出错问题的解决办法
- Android开发实践经验谈:如何让各式手机浏览器可以直接下载apk安装文件且实现自动安装APP
- 通过mk文件编译android4.0.3系统app源码后覆盖安装失败解决办法(android odex文件)
- 通过mk文件编译android4.0.3系统app源码后覆盖安装失败解决办法(android odex文件)
- 用eclipse开发android app,自动补齐时很慢很卡的解决办法(转帖)
- 在Android上开发带数字签名的APK安装文件
- android 安装apk 到 /system/app下面
- Android 安装app显示已经安装 需要卸载,实际没有安装的一种解决办法
- Android开发环境安装SDK后提示parseSdkContent failed的解决办法
- 图文并茂 在MyEclipse 8.6上搭建Android开发环境+MyEclipse8.5 无法安装ADT解决办法
- 解决Android安装文件apk下载变成zip文件
- 使用Appium做手机app自动化时,红米2手机(已ROOT)时不时的弹出覆盖安装Appium Android Input Manager for Unicode的输入法的提示的解决办法
- android 开发中通过JNI无法向SD卡写入文件的解决办法
- 安卓开发中,release安装包安装后,打开app后再按home键,再次点击程序图标app再次重新启动的解决办法