Android常用代码之APK root权限静默安装
2014-01-04 14:20
417 查看
转:http://www.trinea.cn/android/android-silent-install/
本文主要介绍程序如何利用root权限静默安装[b](卸载)APK,如何自动选择普通安装(卸载)还是静默安装[b](卸载)[/b][/b]。
1、root权限静默安装[b](卸载)调用[/b]
引入TrineaAndroidCommon@Github(欢迎star和fork^_^)或TrineaAndroidCommon@GoogleCode作为你项目的library(如何拉取代码及添加公共库),或自己抽取PackageUtils.installSlient(PackageUtils.uninstallSilent)函数进行调用,系统授权管理会弹出对话框让用户选择是否允许应用获得root权限。允许的话即可静默安装。
该函数返回PackageUtils.INSTALL_SUCCEEDED表示安装成功,失败则返回相应错误码,可以得到失败的详细原因,包括文件不存在,apk无效,系统内存不足,签名不正确,缺少公共库,share user错误等等判断。
注意对于较大apk安装过程非常耗时,所以最好新启线程去调用PackageUtils.installSlient。
2、root权限静默安装实现
PackageUtils.installSlient的实现实际使用的是su pm install -r filePath命令。核心代码如下:
PackageUtils.installSlient的实现代码
其中commands为pm install -r . 从中可以看出主要就是使用su切换到root环境下,再调用pm install -r进行安装。
3、普通安装,系统权限静默安装,root权限静默安装的自动选择
查看PackageUtils源码会发现我还提供了其他几个安装函数,其中PackageUtils.install(PackageUtils.uninstall)函数会根据是否是系统应用以及是否拥有root权限,从而确定调用哪种安装方式(普通安装方式、root静默安装方式还是系统权限静默安装),源码如下:
Java
/**
* install according conditions
* <ul>
* <li>if system application or rooted, see {@link #installSilent(Context, String)}</li>
* <li>else see {@link #installNormal(Context, String)}</li>
* </ul>
*
* @param context
* @param filePath
* @return
*/
public static final int install(Context context, String filePath) {
if (!PackageUtils.isSystemApplication(context) && !ShellUtils.checkRootPermission()) {
return installNormal(context, filePath) ? INSTALL_SUCCEEDED : INSTALL_FAILED_INVALID_URI;
}
return installSilent(context, filePath);
}
如果是系统应用记得添加<uses-permission android:name=”android.permission.INSTALL_PACKAGES” />权限,从而走普通安装方式,不用申请root权限进行静默安装。
4、PackageUtils 实现静默卸载应用
见参考PackageUtils.uninstallSlient编写root权限静默删除应用代码。使用pm uninstall [-k] PACKAGE命令即可。
本文主要介绍程序如何利用root权限静默安装[b](卸载)APK,如何自动选择普通安装(卸载)还是静默安装[b](卸载)[/b][/b]。
1、root权限静默安装[b](卸载)调用[/b]
引入TrineaAndroidCommon@Github(欢迎star和fork^_^)或TrineaAndroidCommon@GoogleCode作为你项目的library(如何拉取代码及添加公共库),或自己抽取PackageUtils.installSlient(PackageUtils.uninstallSilent)函数进行调用,系统授权管理会弹出对话框让用户选择是否允许应用获得root权限。允许的话即可静默安装。
该函数返回PackageUtils.INSTALL_SUCCEEDED表示安装成功,失败则返回相应错误码,可以得到失败的详细原因,包括文件不存在,apk无效,系统内存不足,签名不正确,缺少公共库,share user错误等等判断。
注意对于较大apk安装过程非常耗时,所以最好新启线程去调用PackageUtils.installSlient。
2、root权限静默安装实现
PackageUtils.installSlient的实现实际使用的是su pm install -r filePath命令。核心代码如下:
PackageUtils.installSlient的实现代码
其中commands为pm install -r . 从中可以看出主要就是使用su切换到root环境下,再调用pm install -r进行安装。
3、普通安装,系统权限静默安装,root权限静默安装的自动选择
查看PackageUtils源码会发现我还提供了其他几个安装函数,其中PackageUtils.install(PackageUtils.uninstall)函数会根据是否是系统应用以及是否拥有root权限,从而确定调用哪种安装方式(普通安装方式、root静默安装方式还是系统权限静默安装),源码如下:
Java
/**
* install according conditions
* <ul>
* <li>if system application or rooted, see {@link #installSilent(Context, String)}</li>
* <li>else see {@link #installNormal(Context, String)}</li>
* </ul>
*
* @param context
* @param filePath
* @return
*/
public static final int install(Context context, String filePath) {
if (!PackageUtils.isSystemApplication(context) && !ShellUtils.checkRootPermission()) {
return installNormal(context, filePath) ? INSTALL_SUCCEEDED : INSTALL_FAILED_INVALID_URI;
}
return installSilent(context, filePath);
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | /** * install according conditions * <ul> * <li>if system application or rooted, see {@link #installSilent(Context, String)}</li> * <li>else see {@link #installNormal(Context, String)}</li> * </ul> * * @param context * @param filePath * @return */ public static final int install(Context context, String filePath) { if (!PackageUtils.isSystemApplication(context) && !ShellUtils.checkRootPermission()) { return installNormal(context, filePath) ? INSTALL_SUCCEEDED : INSTALL_FAILED_INVALID_URI; } return installSilent(context, filePath); } |
4、PackageUtils 实现静默卸载应用
见参考PackageUtils.uninstallSlient编写root权限静默删除应用代码。使用pm uninstall [-k] PACKAGE命令即可。
相关文章推荐
- android异步机制
- PhoneGap2.9.0本地将html打包成Android应用
- android实操--练习1
- Android 深入ViewPager补间动画,实现类京东商城首页广告Banner切换效果
- android 发送自定义广播以及接收自定义广播
- android 获取View position
- 查看Android手机中是否安装了某个应用
- android小点子
- Android多点触控技术实战,自由地对图片进行缩放和移动
- Android多点触控技术实战,自由地对图片进行缩放和移动
- android开发软件
- android-命令
- android listview 下拉刷新以及加载更多
- android-log
- Android中RelativeLayout各个属性的含义
- Android Google maps api 最新生成方式
- androidpn 推送系统
- android 图片的单点缩放操作
- Android平台关于时间和日期的相关类和方法(Date/Time)
- Android学习记录(5)—在java中学习多线程下载之断点续传②