您的位置:首页 > 移动开发 > Android开发

Android系统应用静默升级/安装

2014-08-10 14:58 281 查看
第一步,配置AndroidManifest.xml文件。

首先,加入:android:sharedUserId="android.uid.system"

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.xxxxxx"
    android:sharedUserId="android.uid.system"
    android:versionCode="1"
    android:versionName="1.0" >

通过shareUserId,拥有同一个User id的多个APK就可以配置成运行在同一个进程中,那么把程序的UID配成android.uid.system,也就是要让程序运行在系统进程中,这样就可以拥有系统权限。

升级要记得版本号要比旧版本大!

然后,配置应用需要的权限:

<uses-permission android:name="android.permission.INSTALL_PACKAGES" />
    <uses-permission android:name="android.permission.DELETE_PACKAGES" />
    <uses-permission android:name="android.permission.CLEAR_APP_USER_DATA" />
    <uses-permission android:name="android.permission.CLEAR_APP_CACHE" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
会提醒:“Permission is only granted to system apps”的错误,意思是“权限只对系统应用授权”,不用担心,只需要project->clean,点击确定提醒就消失了。

顺便说一句,笔者做的这个应用是直接烧入到ROM的,所以是系统应用。

如果通过root,或者是其他方法,只要你的应用是安装在系统根目录system/app/就OK。

第二步:编写安装代码。

我是通过Android的pm命令来安装的。代码如下:

这个方法不单单可以自己更新,也可以以静默的形式,安装其他的应用。

第三步:签名。

完成以上步骤后编译出来的apk文件是不能使用的,这个签名是编译器默认的Debug签名,而不是系统签名。Android系统有的权限是基于签名的,签名不对,也就不能获取相应的权限。那么怎样获取系统签名呢?

1、找到目标系统的源代码,进入build/target/product/security ,找到platform.pk8和platform.x509.pem这两个文件,这是系统默认使用的密钥。

2、已经有密钥了,现在需要签名的工具:signapk.jar文件。signapk.jar的源码位置build/tools/signapk,你可以自己编译成jar文件。或者你如果懒得做,还可以直接在目录中搜索“signapk.jar”,反正我就是这么找到的。。。

3、最好将这几个文件和未签名的apk文件放在一个目录,然后执行命令: java -jar signapk.jar platform.x509.pem platform.pk8 old.apk new.apk。

这条命令的意思是:通过signapk.jar签名工具,以“platform.x509.pem”这个公钥文件和“platform.pk8”这个私钥文件对“old.apk”进行签名,签名后的文件保存为“new.apk”。搞定!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: