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

原创 2014年03月05日 14:03:32
        在Android应用程序开发过程中,经常会碰到要获取系统权限的问题。例如:

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

     1、在源码中编译

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

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    coreApp="true"
    package="com.android.settings"
    android:sharedUserId="android.uid.system"
    android:versionCode="23"
    android:versionName="0.0.23 Build-CHT" >

       ② 修改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包。

        
         
        填写好apk文件名,然后保存。
        
        如果出现以下提示,是提示你未签名程序的局限性,直接点击OK就可以了。
        

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

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

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


THE END

Android中应用程序如何获得系统签名权限

有些库的使用条件比较苛刻,要求同一签名的程序才可以获得访问权。此时即便是在AndroidManifest.xml中添加了相应的permission,依旧会得到没有xx访问权限的问题。比如android...
  • jingwen3699
  • jingwen3699
  • 2012年09月27日 14:38
  • 23550

Android签名机制之---签名过程详解

一、前言又是过了好长时间,没写文章的双手都有点难受了。今天是圣诞节,还是得上班。因为前几天有一个之前的同事,在申请微信SDK的时候,遇到签名的问题,问了我一下,结果把我难倒了。。我说Android中的...
  • jiangwei0910410003
  • jiangwei0910410003
  • 2015年12月25日 15:46
  • 46493

Android APK获取平台系统签名权限

1.修改AndroidManifest.xml,改变uid为android.uid.system,使之与Settings能够共享数据空间。 ...
  • u013398960
  • u013398960
  • 2017年06月13日 19:39
  • 427

Android 自定义View(手写签名)

Demo地址 (源码已经更新,请直接移步Github) https://github.com/venusic/E-signature 概述 本文通过自定义View实现Android手写签名,实现...
  • venusic
  • venusic
  • 2016年08月02日 18:08
  • 12229

Android签名详解(转自ok_lanyan - 博客园)

转载自:http://blog.csdn.net/ocean20/article/details/40855809 1. 为什么要签名 1) 发送者的身份认证 由于开发商可能通过使用相同...
  • lv18092081172
  • lv18092081172
  • 2016年07月10日 20:05
  • 550

Android实战技巧之五十:App的系统签名

这件事困扰我们多时了。 我们一直想用非源码编译的方式解决此事,按如下步骤。这种获取系统签名的方法如下: 1、apk中需要使用android:sharedUserId=”android.uid.sy...
  • lincyang
  • lincyang
  • 2016年03月15日 18:18
  • 6576

Android 系统签名文件

  • 2016年05月19日 12:36
  • 118KB
  • 下载

Android之Keystore文件签名(获取查看apk签名)

Android应用开发的时候会经常使用到第三方SDK,例如地图、推送、支付以及分享等。而这些第三方服务SDK为了应用不被滥用都会有签名验证机制。我们通过上传Android应用的签名来在服务端配置以验证...
  • jdsjlzx
  • jdsjlzx
  • 2016年08月07日 21:02
  • 19875

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

Android应用程序获取系统签名权限的方法         在Android应用程序开发过程中,经常会碰到要获取系统权限的问题。例如:           但...
  • xushanmeng
  • xushanmeng
  • 2014年03月05日 14:03
  • 8168

Android编程下获得应用程序的签名

  • 2016年03月14日 17:12
  • 399KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android应用程序获取系统签名的方法
举报原因:
原因补充:

(最多只允许输入30个字)