Android静默升级和自启动

最近公司有项目需要实现静默升级,升级完成之后还需要自启动,后来查阅了一些资料,实现了所需要的功能


一、静默升级

其实就是静默安装apk,常见的方式一般都要root,或者开启辅助功能,(需要的话可以看下这个项目github.com/a-voyager/AutoInstaller),但是这不是我们想要的,后来观察源码发现真正的安装是通过“pm”工具完成的,那我们就通过他来实现静默安装


1、找到所需要的“pm"工具,可以在你需要升级的Android版本的源码中找到(frameworks -> base -> core -> java -> android -> content -> pm :),然后放到项目里

pm下的aidl

IPackageManager类中有个

installPackage( packageURI, observer, flags, installerPackageName)

packageURI:安装包的地址。

observer:安装完成后的回调函数。

flags:安装方式,主要有普通安装和覆盖安装。1表示普通,2表示覆盖。

installerPackageName:执行安装的应用程序名。

然后通过Java的反射原理拿到ServiceManager的getService方法,下载好apk调用下面方法就可以安装了


2、配置权限,因为静默升级需要系统权限所有我们在Manifest文件中加上

android:sharedUserId="android.uid.system"

并且配置安装apk的权限

android:name="android.permission.INSTALL_PACKAGES"

3、给你的应用打上系统签名

文件位置:..\android_project\build\target\product\security中找到media.pk8、media.x509.pem、platform.pk8、platform.x509.pem、shared.pk8、shared.x509.pem、testkey.pk8、testkey.x509.pem等签名文件,对应不同的权限系统,我们需要的是

需要的签名文件

首先把项目打成一个未签名的包,然后在对这个包进行签名,找到签名文件所在位置,调用以下命令进行签名

java -jar signapk.jar platform.x509.pem platform.pk8 app-debug.apk app-test-sign.apk

这个时候就会生成我们想要的签名包

静默升级就完成了。

二、自启动

1、原本想着安装完成有回调方法

然后通过包名启动APP,

通过包名,启动APP

后来发现无法启动。有兴趣的同学可以再去试试看,之所以后来没用这种方式,因为我找了一个更加简单的方式

2、通过广播启动


通过这个广播我们就可以监听到APP是否更新过,然后在Manifast中注册下就可以了


这个就实现了,静默升级和自启动。

你可能感兴趣的:(Android静默升级和自启动)