Android应用程序获取系统签名的方法

         在Android应用程序开发过程中,经常会碰到要获取系统权限的问题。例如:

    
    
    
 
          但是如果使用eclipse等开发工具,即使在AndroidManifest.xml中添加了这些权限,一样无法获取,因为无法获取系统的签名认证。
         要获取系统签名认证有两种方法:
               1、在源码中编译
               2、手动导入系统签名
         获取了特定的系统签名,只能在特定的系统中运行,换了系统,还是不可以运行。不同厂家的系统签名会有差别。
          我们以Settings为例来看一下这两种方法。

     1、在源码中编译

         在源码中编译应用程序比较方便,不过需要在Linux环境下执行。步骤如下:
         ① 在AndroidManifest.xml文件中添加属性sharedUserId
          找到Manifest节点中加入一个属性   android:sharedUserId="android.uid.system" ,例如:


         ② 修改Android.mk文件
          Android.mk文件时在Linux下用交叉编译连编译的时候才用到的,eclipse中不会自动生成,Android.mk的编写方式在这里就不再赘述。我们在Android.mk文件中添加 LOCAL_CERTIFICATE := platform这一行。例如:

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := $(call all-java-files-under, src)
LOCAL_PACKAGE_NAME := Settings

LOCAL_CERTIFICATE := platform

LOCAL_PROGUARD_FLAG_FILES := proguard.flags

        ③ 把项目放到源码下,用mm命令编译。
编译命令在这里就不再详细解释。

         2、 手动添加系统签名

         手动添加系统签名较为麻烦,但不必进入Linux环境,在Windows环境下就能操作。步骤如下:
           ① 在AndroidManifest.xml文件中添加属性 sharedUserId
         同前一种方法一样, 找到Manifest节点中加入一个属性   android:sharedUserId="android.uid.system"。

          ② 使用eclipse导出未签名的apk
           如图所示,使用Android Tools导出未签名的apk包。

         Android应用程序获取系统签名的方法_第1张图片
           
         填写好apk文件名,然后保存。
Android应用程序获取系统签名的方法_第2张图片
         
         如果出现以下提示,是提示你未签名程序的局限性,直接点击OK就可以了。
Android应用程序获取系统签名的方法_第3张图片         

         ③ 编译signapk.jar
         如果已有此jar包,可以略过此步骤。
         signapk.jar通过编译源码中build/tools /signapk项目得到。由于本人的系统源码在Linux上,我们在 Linux 环境中演示编译方法,Windows环境中编译方法与此一样。
         我把源码放到了Document目录下,所以先进入到signapk目录。 
         
         然后使用javac命令编译得到SignApk$SignatureOutputStream.class和SignApk.class。
         
          Android应用程序获取系统签名的方法_第4张图片
         在此目录下创建新目录com/android/signapk/,并将这两个文件复制 进去。
    
         进入新建的目录,并新建SignApk.mf,写入以下一行内容:
                         Main-Class: com.android.signapk.SignApk
    
         然后执行命令  jar cvfm signapk.jar  SignApk.mf  com ,就得到了signapk.jar文件
    
          Android应用程序获取系统签名的方法_第5张图片

         ④ 获得 platform.x509.pem和platform.pk8两个文件
         这两个文件在系统源码目录 build/target/product/security/ 下,拷贝出来。这是两个文件是获取签名的关键。注意只有运行有此源码编译的系统的设备才能识别这个系统签名,其他系统不行。
          Android应用程序获取系统签名的方法_第6张图片

        ⑤ 手动导入系统签名
         将 signapk.jar、platform.x509.pem、platform.pk8 和未签名的apk放到一个文件夹下。为了方便演示,我都放到E:盘根目录下。
          Android应用程序获取系统签名的方法_第7张图片
         切换当前目录到文件所在目录,然后执行命令:
                   java -jar signapk.jar platform.x509.pem platform.pk8 未签名的APK文件名 签名后的APK文件名
         例如:
         
         这样就得到了签名后的APK文件。
          Android应用程序获取系统签名的方法_第8张图片


THE END

你可能感兴趣的:(Android)