Android系统制作自定义签名的例子

1、简介

应客户要求为了是特殊定制的系统更具安全,系统ROM需要使用自己定义的签名,还有一些特殊的场景也会更改系统的签名比如在过cts认证测试的时候也会修改平台签名才能测试通过关于签名的问题。

这是因为平台默认的是test签名.网上大多说签名的都是app签名而非平台签名。

test签名这种类型的key只适用于开发阶段,而且这种秘钥是公开的,谁都可以使用。

当发布一款android产品,就需要另外给整个系统签个名,防止被别人盗用。这种系统就是release版本的Android系统。

这里就简单记录下方法。

2、制作自己的平台release签名

要对Android系统进行签名,需要生成四种类型的key文件。

a) releasekey

b) media

c) shared

d) platform

我们就拿platform 为例简单介绍下生成过程。

1)进入/Android源码根目录/development/tools目录。

2)使用make_key工具生成签名文件

development/tools$ sh make_key platform
‘/C=CN/ST=ShanXi/L=Xi`an/O=Company/OU=Department/CN=banfeipeng/emailAddress=23333869@qq.com'

Enter password for ‘shared' (blank for none; password will be visible): mypassword <——- 设置你的密码
creating shared.pk8 with no password
Generating RSA private key, 2048 bit long modulus
……………………………………..+++
………………+++
e is 65537 (0x10001)

3)make_key的参数介绍

这里要顺便介绍下make_key的参数。第一个参数是要生成key的名字,第二个参数是关于你公司的信息。

key的名字很好理解,就是前面提到的4中类型的key,公司信息的参数比较多,它们的含义如下:

C —> Country Name (2 letter code)

ST —> State or Province Name (full name)

L —> Locality Name (eg, city)

O —> Organization Name (eg, company)

OU —> Organizational Unit Name (eg, section)

CN —> Common Name (eg, your name or your server's hostname)

emailAddress —> Contact email address

4)生成后的结果如下:

5)pk8是生成的私钥,而*.x509.pem是公钥,生成时两者是成对出现的.

3、修改android平台签名为刚才修改的签名文件

1.修改build/core/config.mk将:

ifdef PRODUCT_DEFAULT_DEV_CERTIFICATE
DEFAULT_SYSTEM_DEV_CERTIFICATE := $(PRODUCT_DEFAULT_DEV_CERTIFICATE)
else
DEFAULT_SYSTEM_DEV_CERTIFICATE := build/target/product/security/testkey
endif

修改为:

ifdef PRODUCT_DEFAULT_DEV_CERTIFICATE
DEFAULT_SYSTEM_DEV_CERTIFICATE := $(PRODUCT_DEFAULT_DEV_CERTIFICATE)
else
DEFAULT_SYSTEM_DEV_CERTIFICATE := build/target/product/security/XXXreleasekey
endif

2.将上面生成的签名文件放到 build/target/product/security/XXX/目录

3.修改external/sepolicy/keys.conf

补充知识:test.pk8 和 test.x509.pem转换为 android studio 使用的 keystore 文件

我就废话不多说了,还是直接看代码吧!

set in_pk8="F:\chNet\sign_mstar9380\testkey.pk8"
set in_x509_pem="F:\chNet\sign_mstar9380\testkey.x509.pem"

set out_name=out.keystore.testkey
set out_alias="mstar"
set storePassword=12345678
set keyPassword=12345678

set tmp_file1=platform.p12
set tmp_file2=testkey.pem

set openssl="D:\Program Files\Git\usr\bin\openssl.exe"
set keytool="C:\Program Files\Java\jre1.8.0_191\bin\keytool.exe"

::使用 open ssl 将pk8 解密为 pem 文件, 此时生成一个testkey.pem 文件
%openssl% pkcs8 -inform DER -nocrypt -in %in_pk8% -out %tmp_file2%

::将两个pem 文件导入platform.p12文件中,
::并设置 别名 testkey 和keypass 密码:12345678 (别名和密码可自定义)会新生成 platform.p12
%openssl% pkcs12 -export -in %in_x509_pem% -inkey %tmp_file2% -out %tmp_file1% -password pass:%keyPassword% -name %out_alias%

::使用keytool 将之前生成的platform.p12导入 testkey.jks 签名中,并设置storepass密码(12345678)
::需要正确提供keypass 密码
::此时即生成了需要的testkey.jks 签名文件
%keytool% -importkeystore -deststorepass %storePassword% -destkeystore %out_name% -srckeystore %tmp_file1% -srcstoretype PKCS12 -srcstorepass %keyPassword%

::删除临时文件
del %tmp_file1%
del %tmp_file2%

::查看生成的 签名信息
%keytool% -list -v -keystore %out_name%
pause

以上这篇Android系统制作自定义签名的例子就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 使用Android Studio实现为系统级的app签名

    我们在做系统级的app开发时,往往会在AndroidManifest.xml文件中添加:android:sharedUserId="android.uid.system"以获取系统级的权限,如果你正在使用Android Studio进行开发,编译生成的apk会因为签名问题无法安装. 此时有两个解决方案, 1,是将编译好的apk放入源码中vender目录下,编写相应的android.mk文件,并在文件中加入: LOCAL_CERTIFICATE := platform 然后使用"

  • Android实现获取签名及公钥的方法

    本文实例讲述了Android实现获取签名及公钥的方法.分享给大家供大家参考.具体如下: 1. java代码如下: private byte[] getSign(Context context) { PackageManager pm = context.getPackageManager(); List<PackageInfo> apps = pm .getInstalledPackages(PackageManager.GET_SIGNATURES); Iterator<Package

  • Android中APK签名工具之jarsigner和apksigner详解

    一.工具介绍 jarsigner是JDK提供的针对jar包签名的通用工具, 位于JDK/bin/jarsigner.exe apksigner是Google官方提供的针对Android apk签名及验证的专用工具, 位于Android SDK/build-tools/SDK版本/apksigner.bat 不管是apk包,还是jar包,本质都是zip格式的压缩包,所以它们的签名过程都差不多(仅限V1签名), 以上两个工具都可以对Android apk包进行签名. 1.V1和V2签名的区别 在An

  • Android系统制作自定义签名的例子

    1.简介 应客户要求为了是特殊定制的系统更具安全,系统ROM需要使用自己定义的签名,还有一些特殊的场景也会更改系统的签名比如在过cts认证测试的时候也会修改平台签名才能测试通过关于签名的问题. 这是因为平台默认的是test签名.网上大多说签名的都是app签名而非平台签名. test签名这种类型的key只适用于开发阶段,而且这种秘钥是公开的,谁都可以使用. 当发布一款android产品,就需要另外给整个系统签个名,防止被别人盗用.这种系统就是release版本的Android系统. 这里就简单记录

  • Android中制作自定义dialog对话框的实例分享

    自定义dialog基础版 很多时候,我们在使用android sdk提供的alerdialog的时候,会因为你的系统的不同而产生不同的效果,就好比如你刷的是MIUI的系统,弹出框都会在顶部显示!这里简单的介绍自定义弹出框的应用. 首先创建布局文件dialog: 代码: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.and

  • android系统分享的自定义功能的示例代码

    分享功能是app中特别常见的功能,国内的app基本都支持分享到微信 QQ等主流的社交应用.至于分享功能的实现大多是使用第三方的share sdk一步到位,或者分享的app比较少比如就一个微信 那通常使用微信sdk的分享模块即可.但其实android系统就给我们提供过一种分享的实现方式,代码也比较简单如下 Intent share = new Intent(Intent.ACTION_SEND); share.setType("text/plain"); share.putExtra(I

  • Android编程实现自定义系统菜单背景的方法

    本文实例讲述了Android编程实现自定义系统菜单背景的方法.分享给大家供大家参考,具体如下: 不多说,上图,见代码. package lab.sodino.menutest; import android.content.Context; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.util.AttributeSet; import androi

  • 详解Android Material Design自定义动画的编写

    新的动画Api,让你在UI控件里能创建触摸反馈,改变View的状态,切换activity的一系列自定义动画 具体有: 响应View的touch事件的触摸反馈动画 隐藏和显示View的循环展示动画 两个Activity间的切换动画 更自然的曲线运动的动画 使用View的状态更改动画,能改变一个或多个View的属性 在View的状态更改时显示状态列表动画 这些new animations Api,已内置在标准Widget中,如Button.在自定义view时也可使用这些api 动画在Material

  • Ubuntu中为Android系统上编写Linux内核驱动程序实现方法

    在智能手机时代,每个品牌的手机都有自己的个性特点.正是依靠这种与众不同的个性来吸引用户,营造品牌凝聚力和用户忠城度,典型的代表非iphone莫属了.据统计,截止2011年5月,AppStore的应用软件数量达381062个,位居第一,而Android Market的应用软件数量达294738,紧随AppStore后面,并有望在8月份越过AppStore.随着Android系统逐步扩大市场占有率,终端设备的多样性亟需更多的移动开发人员的参与.据业内统计,Android研发人才缺口至少30万.目前,

  • 浅析Android系统的架构以及程序项目的目录结构

    Android框架结构 直接上图: 由上图,我们可以看出Android系统架构由5部分组成, 分别是:Linux Kernel(linux内核).Android Runtime(运行时环境).Libraries(类库).Application Framework(应用框架).Applications(应用). 1.1.Linux Kernel Android基于Linux 2.6提供核心系统服务,例如:安全.内存管理.进程管理.网络堆栈.驱动模型.Linux Kernel也作为硬件和软件之间的抽

  • Android系统对话框使用详解(最详细)

    在实际应用开发中,用到系统对话框中的情况几乎是没有的.按开发流程来说,UI工程师都会给出每一个弹窗的样式,故而在实际开发中都是自定义弹窗的. 即使用到的地方不多,但是我们也是需要了解并且能熟练的运用它,下面为大家奉上各种系统对话框的实现. 目录 一.系统对话框的几种类型与实现 在项目的实际开发中,用到的系统对话框几乎是没有的.原因大概包含以下几点: 样式过于单一,不能满足大部分实际项目中的需求. 对话框的样式会根据手机系统版本的不同而变化.不能达到统一的样式. 能实现的功能过于简单. 在这里先附

  • 好人共享的一个万能Ghost系统制作教程附相关软件下载第1/3页

    一直都为封装好的ghost版系统而惊讶,今天发现原来有人共享了万能ghost系统制作方法,特留个印象,以后自己就可以制作万能Ghost系统了 一.前期基础工作 ================= 1.准备所需工具软件(www.ylmf.net提供下载) *S&R&S_V9.6.0608 智能系统封装工具 *DEPLOY.CAB(在系统安装光盘:\SUPPORT\TOOLS目录下自带) *Ghost_v8.0 & v8.2(v8.0以上版本才能够支持NTFS分区) *Windows2

  • Android开发框架之自定义ZXing二维码扫描界面并解决取景框拉伸问题

    先给大家展示下效果图: 扫描内容是下面这张,二维码是用zxing库生成的 由于改了好几个类,还是去年的事都忘得差不多了,所以只能上这个类的代码了,主要就是改了这个CaptureActivity.java package com.zxing.activity; import java.io.IOException; import java.util.Vector; import android.app.Activity; import android.content.Intent; import

随机推荐