Android签名

来源:互联网 发布:php文件缓存 编辑:程序博客网 时间:2024/05/17 05:05
android的标准签名key有:

testkey
media
platform
shared

以上的四种,可以在源码的/build/target/product/security里面看到对应的密钥,其中shared.pk8代表私钥,shared.x509.pem公钥,一定是成对出现的。

其中testkey是作为android编译的时候默认的签名key,如果系统中的apk的android.mk中没有设置LOCAL_CERTIFICATE的值,就默认使用testkey。

而如果设置成:

LOCAL_CERTIFICATE := platform

就代表使用platform来签名,这样的话这个apk就拥有了和system相同的签名,因为系统级别的签名也是使用的platform来签名,此时使用android:sharedUserId="android.uid.system"才有用!


具体签名方法:

(1)platform签名:
AndroidManifest.xml的manifest节点中添加 android:sharedUserId="android.uid.system",
Android.mk中增加  LOCAL_CERTIFICATE := platform
(2)shared签名:
AndroidManifest.xml的manifest节点中增加android:sharedUserId="android.uid.shared",
Android.mk中增加LOCAL_CERTIFICATE := shared
(3)media签名:
AndroidManifest.xml的manifest节点中增加 android:sharedUserId="android.media",
Android.mk中增加 LOCAL_CERTIFICATE := media
    由于需要在Android.mk中增加信息,我们暂时在Android源码中编译生成apk包。具体的操作方法如下:
(1)在Android源码中选择一个APK程序,作为需要签名的程序,我选择/xxx/packages/apps下的一个程序,copy并更名为SignTest。
(2)将当前APK应用添加platform签名,首先在AndroidManifest.xml文件中添加信息,如:
          package="com.mediatek.weather3dwidget" android:sharedUserId="android.uid.shared">
(3)在Android.mk文件中添加信息,如:
LOCAL_EMMA_COVERAGE_FILTER := +com.mediatek.weather3dwidget.* -com.mediatek.weather3dwidget.R
LOCAL_CERTIFICATE := shared
LOCAL_RESOURCE_DIR += $(LOCAL_PATH)/../../../frameworks/opt/ngin3d/inflater/res $(LOCAL_PATH)/res
(4)进行模块编译,生成一个apk,本示例为SignTest.apk
(5)针对本apk进行platform签名,可以通过签名系统,也可以通过eclipse,或者通过相应的工具。
(6)如果将该应用放置在别的系统中,则会报“INSTALL_FAILED_SHARED_USER_INCOMPATIBLE”的错误,这是签名不一致导致的。

原创粉丝点击