如何实现android应用的静默安装
2013-07-19 17:41
197 查看
在很多情况下,我们需要在Android系统上实现应用程序的静默安装,但很不幸的是,从Android
1.5之后Google就不再提供静默安装的接口了。
下面介绍一种比较简单的静默安装实现方法。
原理:
使用隐藏的系统API——installPackage。该方法在1.5版之后的android
SDK中是看不见的,查看源码可以看到它设置了@hide属性,但在实际的运行包framework.jar中是存在的,因此只要能编译通过,安装到系统后是可以正常运行的。
步骤:
1.
从模拟器System\framework目录下提取framework.jar
2.
将framework.jar后缀名改为zip,解压后提取其中的classes.dex文件
3.
用dex2jar工具将classes.dex转成classes.dex.dex2jar.jar(注意新版本的dex2jar工具无法转换Android2.2的framework,建议使用dex2jar-0.0.7.8-SNAPSHOT,该工具可以从google官方站上下载到)
4.
将classes.dex.dex2jar.jar改名为classes.dex.dex2jar.zip解压取出android/content/pm/目录下的PackageManager.class,IPackageInstallObserver.class,IPackageDeleteObserver.class及相关的几个class文件备用
5.
找到android-sdk目录下的android.jar,改名为android.zip(注意改名前先备份一下),解压后将步骤4中取得的class文件覆盖到android对应的目录下,重新压缩成android.zip,并改名为android.jar
6.
这个时候你的android.jar已经是一个更新过的SDK了,重新打开eclipse工程,你已经可以调用方法:
void
android.content.pm.PackageManager.installPackage(Uri packageURI, IPackageInstallObserverobserver,
int flags, String installerPackageName)
具体调用方法参考F2
说明:
1.
由于更改android.jar可能导致重新加载SDK失败,覆盖之前切记备份一下
2.
实际上该过程可以调用到任何hide属性的API,本文为了影响最小,只覆盖了installPackage相关的class
3.
下载android源码重新编译SDK也可以实现调用隐藏API,不过比较麻烦
4.
以上过程在android2.2版本实施通过,其他版本理论上也可以,不过我没试过。
大家有什么想要问的,反正我做到第六步的时候报错了,可能是重新加载SDK没有成功,不知道大家有没有好的解决办法。
from:http://blog.sina.com.cn/s/blog_5669faf70100u7sn.html
1.5之后Google就不再提供静默安装的接口了。
下面介绍一种比较简单的静默安装实现方法。
原理:
使用隐藏的系统API——installPackage。该方法在1.5版之后的android
SDK中是看不见的,查看源码可以看到它设置了@hide属性,但在实际的运行包framework.jar中是存在的,因此只要能编译通过,安装到系统后是可以正常运行的。
步骤:
1.
从模拟器System\framework目录下提取framework.jar
2.
将framework.jar后缀名改为zip,解压后提取其中的classes.dex文件
3.
用dex2jar工具将classes.dex转成classes.dex.dex2jar.jar(注意新版本的dex2jar工具无法转换Android2.2的framework,建议使用dex2jar-0.0.7.8-SNAPSHOT,该工具可以从google官方站上下载到)
4.
将classes.dex.dex2jar.jar改名为classes.dex.dex2jar.zip解压取出android/content/pm/目录下的PackageManager.class,IPackageInstallObserver.class,IPackageDeleteObserver.class及相关的几个class文件备用
5.
找到android-sdk目录下的android.jar,改名为android.zip(注意改名前先备份一下),解压后将步骤4中取得的class文件覆盖到android对应的目录下,重新压缩成android.zip,并改名为android.jar
6.
这个时候你的android.jar已经是一个更新过的SDK了,重新打开eclipse工程,你已经可以调用方法:
void
android.content.pm.PackageManager.installPackage(Uri packageURI, IPackageInstallObserverobserver,
int flags, String installerPackageName)
具体调用方法参考F2
说明:
1.
由于更改android.jar可能导致重新加载SDK失败,覆盖之前切记备份一下
2.
实际上该过程可以调用到任何hide属性的API,本文为了影响最小,只覆盖了installPackage相关的class
3.
下载android源码重新编译SDK也可以实现调用隐藏API,不过比较麻烦
4.
以上过程在android2.2版本实施通过,其他版本理论上也可以,不过我没试过。
大家有什么想要问的,反正我做到第六步的时候报错了,可能是重新加载SDK没有成功,不知道大家有没有好的解决办法。
from:http://blog.sina.com.cn/s/blog_5669faf70100u7sn.html
相关文章推荐
- 如何实现Android应用的静默安装
- 如何实现Android应用的静默安装
- 如何实现Android应用的静默安装
- 实例解析如何在Android应用中实现弹幕动画效果
- Android应用如何实现换肤功能
- Android 中免 Root 实现 Hook 的 Dexposed 实现原理解析以及如何实现应用的热修复
- Android应用如何实现换肤功能
- Android应用如何监听自己是否被卸载及卸载反馈功能的实现(第二版)
- android应用如何在有需要时申请root权限?在程序中要调用哪些语句来实现?
- Android中免Root实现Hook的Dexposed框架实现原理解析以及如何实现应用的热修复
- Android如何实现点击一次返回键返回桌面而不是退出应用
- Android中免Root实现Hook的Dexposed框架实现原理解析以及如何实现应用的热修复
- Android应用如何监听自己是否被卸载及卸载反馈功能的实现
- Android如何实现社交应用中的评论与回复功能详解
- Android 4.2+ 应用如何监听自己是否被卸载及卸载反馈功能的实现(第三版)
- [Android问答] 如何实现“退出应用”功能?
- Android 7.0以上版本,如何实现应用内语言切换
- Android如何实现点击一次返回键返回桌面而不是退出应用?
- Android应用开发中如何实现条件编译
- 如何实现 Android 应用的持续部署?