您的位置:首页 > 编程语言 > Java开发

eclipse源码编译的apk开发,使用系统签名机制. (可让自己的写的apk有权限卸载其他应用)

2013-01-16 15:37 477 查看
原文路径:/article/9638711.html

转载这篇文章主要是为了实现一个功能:

目前,自己写了一个apk,其中有卸载功能,要实现可以卸载用户安装的应用。(install 到真机中,安装后在data/app目录下,不是push到system目录,如果放到system下,是可以正常卸载的)

1、调用了系统的卸载apk的方法,但是卸载时会报错:说没有android.permission.DELETE_PACKAGES权限,其实这个权限已经加进去了。真正的原因应该是,自己的apk不是系统应用,获取不到系统的卸载权限。

2、于是想到,在manifest的manifest标签中加入android:sharedUserId="android.uid.system",使其跑在系统进程中。但是,问题来了,加入这句话后,apk无法安装到系统中。

3、现在就要解决在加了android:sharedUserId="android.uid.system"后,怎么可以安装apk,于是就用到了这篇文章中的 “二、eclipse源码编译”,按照这个步骤,生成的签名后的apk就可以正常安装,并且可以实现卸载(无论install 还是push到system下)。

4、问题解决。

注意:用到的platform.pk8、platform.x509.pem、SignApk.java、SignApk.mf文件要用和机器系统对应的文件,也就是说,用的那套源码编译的系统,就用那套源码中的这几个文件。

一、Android Apk签名

Apk签名首先要有一个keystore的签名用的文件。

keystore是由jdk自带的工具keytool生成的。

具体生成方式参考:

开始->运行->cmd->cd到你安装的jdk的目录里,我的是C:/Program Files/Java/jdk1.6.0_10/bin

然后输入:

keytool -genkey -alias asaiAndroid.keystore -keyalg RSA -validity 20000 -keystore asaiAndroid.keystore

-alias 后面跟的是别名这里是 asaiAndroid.store

-keyalg 是加密方式这里是RSA

-validity 是有效期 这里是20000

-keystore 就是要生成的keystore的名称 这里是asiAndroid.keystore

然后按回车键

按回车后首先会提示你输入的密码:这个在签名时要用的,要记住

然后会再确认你的密码。

之后会依次叫你输入姓名、组织单位、组织名称、城市区域、省份名称、国家代码(CN)等。

开始签名。

在 C:/Program Files/Java/jdk1.6.0_10/bin 还提供一个工具 jarsigner.exe

运行命令给APK签名:

jarsigner -verbose -keystore asaiAndroid.keystore -signedjar Lotteryonline_signed.apk LotteryOnline.apk asaiAndroid.keystore

-keystore: keystore的名称

LotteryOnline_signed.apk: 签名后的APK

LotteryOnline.apk: 签名前的APK

然后按回车:会要求输入刚才设置的密码,输入后按回车就开始签名了。

二、eclipse源码编译,无需用make来编译(android源码目录<D:/myandroid_mx27>):

1、首先,AndroidManifest.xml中manifest节点中加入android:sharedUserId="android.uid.system"这个属性

2、用eclipse编译出apk(ClockSetting.apk)文件,但这个文件不能用,删掉META-INF目录下的CERT.SF和CERT.RSA两个文件

3、使用当前android系统(android系统可能不同)的platform密钥来重新给apk文件签名(可能还未用用户米要签名)。

首先,找到密钥文件,在我的Android源码目录中的位置是"build/target/product/security",下面的platform.pk8和platform.x509.pem两个文件。

然后,用Android提供的SignApk工具来签名,signapk的源代码是在"build/tools/signapk"下,这时得为下面的编译工作做些准备:

<1>、编译jar

命令行cd到signapk.java代码目录下,

javac signapk.java

获取SignApk$SignatureOutputStream.class和SignApk.class

建立目录s/com/android/signapk,将两个class文件放入目录下

jar cvfm signapk.jar SignApk.mf -C s/ .

注意:"s/"后面的"."前面有空格

生成signapk.jar文件,得到了Android提供的签名程序signapk.jar

<2>、用目标系统的platform密钥签名

将platform.pk8和platform.x509.pem文件复制到"D:/myandroid_mx27/build/tools/signapk"目录下,即signapk.jar和SignApk.mf所在的目录。

java -jar signapk.jar platform.x509.pem platform.pk8 D:/ClockSetting.apk D:/ClockSettingSigned.apk

我的未签名(ClockSetting.apk)和已签名(ClockSettingSigned.apk)apk文件都放在D盘,这样就得到了用Android源码编译的文件。

<3>、打开真机,安装:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐