修改Android系统APK(DownloadProvider)完成后, 运行报错:
[2012-05-07 19:45:54 - DownloadProviderUI] Installation error: INSTALL_FAILED_SHARED_USER_INCOMPATIBLE
[2012-05-07 19:45:54 - DownloadProviderUI] Please check logcat output for more details.
[2012-05-07 19:45:54 - DownloadProviderUI] Launch canceled!
到网上搜索验证后, 发现在 AndroidManifest.xml的头文件中多了这个属性"android:sharedUserId="android.media" , 网上 , 有人说只要把这个属性删除就行了. 删除这个属性确实能够安装成功, 但是运行会报错. 然后继续搜索, 发现要想成功安装该apk, 必须对其进行签名.
以下是签名步骤:
1、用eclipse编译出apk(ClockSetting.apk)文件,但这个文件不能用,删掉META-INF目录下的CERT.SF和CERT.RSA两个文件
2、使用当前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文件(注意: 这两个文件根据AndroidManifest.xml头文件属性android:sharedUserId="android.media"来决定使用哪个签名.)复制到"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源码编译的文件。
系统签名部分转载网友: elao520 的文章(详情: http://www.eoeandroid.com/thread-46074-1-1.html)