基于android-11.0.0_r39,系统应用的手动签名方法和过程(代码片段)

阿迷创客 阿迷创客     2022-12-24     313

关键词:

片头

  • 基于android-11.0.0_r39
  • 这个版本签名工具的路径和之前android 9 的相比,有变化,操作过程及记录如下

1. 签名的命令

szhou@Android:~/aosp_works/aosp$ java -jar -Djava.library.path="/home/szhou/aosp_works/aosp/out/host/linux-x86/lib64/"  out/soong/host/linux-x86/framework/signapk.jar  myapk/platform.x509.pem myapk/platform.pk8 myapk/app-debug.apk myapk/app-debug-signed.apk

.

2. 签名的过程及错误

2.1 no conscrypt_openjdk_jni-linux-x86_64

szhou@Android:~/aosp_works/aosp$ java -jar -Djava.library.path="/home/szhou/aosp_works/aosp/out/host/linux-x86/lib64/"  out/soong/host/linux-x86/framework/signapk.jar  myapk/platform.x509.pem myapk/platform.pk8 myapk/app-debug.apk myapk/app-debug-signed.apk
Exception in thread "main" java.lang.UnsatisfiedLinkError: no conscrypt_openjdk_jni-linux-x86_64 in java.library.path: [/home/szhou/aosp_works/aosp/out/host/linux-x86/lib64/]
        at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2660)
        at java.base/java.lang.Runtime.loadLibrary0(Runtime.java:829)
        at java.base/java.lang.System.loadLibrary(System.java:1867)
        at org.conscrypt.NativeLibraryUtil.loadLibrary(NativeLibraryUtil.java:54)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:566)
        at org.conscrypt.NativeLibraryLoader$1.run(NativeLibraryLoader.java:297)
        at org.conscrypt.NativeLibraryLoader$1.run(NativeLibraryLoader.java:289)
        at java.base/java.security.AccessController.doPrivileged(Native Method)
        at org.conscrypt.NativeLibraryLoader.loadLibraryFromHelperClassloader(NativeLibraryLoader.java:289)
        at org.conscrypt.NativeLibraryLoader.loadLibrary(NativeLibraryLoader.java:262)
        at org.conscrypt.NativeLibraryLoader.load(NativeLibraryLoader.java:162)
        at org.co

szhou@Android:~/aosp_works/aosp$ cp prebuilts/sdk/tools/linux/lib64/libconscrypt_openjdk_jni.so /home/szhou/aosp_works/aosp/out/host/linux-x86/lib64/
szhou@Android:~/aosp_works/aosp$ 

.

2.2 RegisterNatives failed for ‘org/conscrypt/NativeCrypto’

  • aosp源码下有好几个libconscrypt_openjdk_jni.so
  • 若复制的SO不正确,就会出现此错误,这个时候只需要查找aosp目录下的libconscrypt_openjdk_jni.so,即可找到正确的
szhou@Android:~/aosp_works/aosp$ cp prebuilts/sdk/tools/linux/lib64/libconscrypt_openjdk_jni.so /home/szhou/aosp_works/aosp/out/host/linux-x86/lib64/
szhou@Android:~/aosp_works/aosp$ java -jar -Djava.library.path="/home/szhou/aosp_works/aosp/out/host/linux-x86/lib64/"  out/soong/host/linux-x86/framework/signapk.jar  myapk/platform.x509.pem myapk/platform.pk8 myapk/app-debug.apk myapk/app-debug-signed.apk
FATAL ERROR in native method: RegisterNatives failed for 'org/conscrypt/NativeCrypto'; aborting...
        at java.lang.ClassLoader$NativeLibrary.load0(java.base@11.0.4/Native Method)
        at java.lang.ClassLoader$NativeLibrary.load(java.base@11.0.4/ClassLoader.java:2430)
        at java.lang.ClassLoader$NativeLibrary.loadLibrary(java.base@11.0.4/ClassLoader.java:2487)
        - locked <0x0000000455c07640> (a java.util.HashSet)
        at java.lang.ClassLoader.loadLibrary0(java.base@11.0.4/ClassLoader.java:2684)
        at java.lang.ClassLoader.loadLibrary(java.base@11.0.4/ClassLoader.java:2649)
        at java.lang.Runtime.loadLibrary0(java.base@11.0.4/Runtime.java:829)
        - locked <0x0000000455c07aa0> (a java.lang.Runtime)
        at java.lang.System.loadLibrary(java.base@11.0.4/System.java:1867)
        at org.conscrypt.NativeLibraryUtil.loadLibrary(NativeLibraryUtil.java:54)
        at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(java.base@11.0.4/Native Method)
        at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(java.base@11.0.4/NativeMethodAccessorImpl.java:62)
        at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(java.base@11.0.4/DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(java.base@11.0.4/Method.java:566)
        at org.conscrypt.NativeLibraryLoader$1.run(NativeLibraryLoader.java:297)
        at org.conscrypt.NativeLibraryLoader$1.run(NativeLibraryLoader.java:289)
        at java.security.AccessController.doPrivileged(java.base@11.0.4/Native Method)
        at org.conscrypt.NativeLibraryLoader.loadLibraryFromHelperClassloader(NativeLibraryLoader.java:289)
        at org.conscrypt.NativeLibraryLoader.loadLibrary(NativeLibraryLoader.java:262)
        at org.conscrypt.NativeLibraryLoader.load(NativeLibraryLoader.java:162)
        at org.conscrypt.NativeLibraryLoader.loadFirstAvailable(NativeLibraryLoader.java:106)
        at org.conscrypt.NativeCryptoJni.init(NativeCryptoJni.java:50)
        at org.conscrypt.NativeCrypto.<clinit>(NativeCrypto.java:63)
        at org.conscrypt.OpenSSLProvider.<init>(OpenSSLProvider.java:58)
        at org.conscrypt.OpenSSLProvider.<init>(OpenSSLProvider.java:51)
        at org.conscrypt.OpenSSLProvider.<init>(OpenSSLProvider.java:47)
        at com.android.signapk.SignApk.main(SignApk.java:1038)
已放弃 (核心已转储)
szhou@Android:~/aosp_works/aosp$

2.3 查找正确的libconscrypt_openjdk_jni.so

  • 从之前经验,必须使用编译时生成的,也就是soong下的这个
  • 若有不确定,逐个复制到out/host/linux-x86/lib64/目录下测试即可
szhou@Android:~/aosp_works/aosp/out$ find . -name libconscrypt_openjdk_jni.so
./soong/.intermediates/external/conscrypt/libconscrypt_openjdk_jni/linux_glibc_x86_64_shared/libconscrypt_openjdk_jni.so
./soong/host/linux-x86/lib64/libconscrypt_openjdk_jni.so
./host/linux-x86/lib64/libconscrypt_openjdk_jni.so
szhou@Android:~/aosp_works/aosp/out$ cp ./soong/.intermediates/external/conscrypt/libconscrypt_openjdk_jni/linux_glibc_x86_64_shared/libconscrypt_openjdk_jni.so^C
szhou@Android:~/aosp_works/aosp/out$ cd .. 
szhou@Android:~/aosp_works/aosp$ cp ./soong/.intermediates/external/conscrypt/libconscrypt_openjdk_jni/linux_glibc_x86_64_shared/libconscrypt_openjdk_jni.so /home/szhou/aosp_works/aosp/out/host/linux-x86/lib64/
cp: 无法获取'./soong/.intermediates/external/conscrypt/libconscrypt_openjdk_jni/linux_glibc_x86_64_shared/libconscrypt_openjdk_jni.so' 的文件状态(stat): 没有那个文件或目录
szhou@Android:~/aosp_works/aosp$ cp ./out/soong/.intermediates/external/conscrypt/libconscrypt_openjdk_jni/linux_glibc_x86_64_shared/libconscrypt_openjdk_jni.so /home/szhou/aosp_works/aosp/out/host/linux-x86/lib64/
szhou@Android:~/aosp_works/aosp$ java -jar -Djava.library.path="/home/szhou/aosp_works/aosp/out/host/linux-x86/lib64/"  out/soong/host/linux-x86/framework/signapk.jar  myapk/platform.x509.pem myapk/platform.pk8 myapk/app-debug.apk myapk/app-debug-signed.apk

3. 查看APK的签名

szhou@Android:~/aosp_works/aosp$ keytool 
密钥和证书管理工具

命令:

 -certreq            生成证书请求
 -changealias        更改条目的别名
 -delete             删除条目
 -exportcert         导出证书
 -genkeypair         生成密钥对
 -genseckey          生成密钥
 -gencert            根据证书请求生成证书
 -importcert         导入证书或证书链
 -importpass         导入口令
 -importkeystore     从其他密钥库导入一个或所有条目
 -keypasswd          更改条目的密钥口令
 -list               列出密钥库中的条目
 -printcert          打印证书内容
 -printcertreq       打印证书请求的内容
 -printcrl           打印 CRL 文件的内容
 -storepasswd        更改密钥库的存储口令

使用 "keytool -?, -h, or --help" 可输出此帮助消息
使用 "keytool -command_name --help" 可获取 command_name 的用法。
使用 -conf <url> 选项可指定预配置的选项文件。
szhou@Android:~/aosp_works/aosp$ keytool  -printcert -jarfile myapk/app-debug-signed.apk 
签名者 #1:

签名:

所有者: EMAILADDRESS=android@android.com, CN=Android, OU=Android, O=Android, L=Mountain View, ST=California, C=US
发布者: EMAILADDRESS=android@android.com, CN=Android, OU=Android, O=Android, L=Mountain View, ST=California, C=US
序列号: ff0641323cf95512
生效时间: Tue Dec 23 14:43:41 CST 2014, 失效时间: Sat May 10 14:43:41 CST 2042
证书指纹:
         SHA1: 41:79:1C:9B:8F:AF:15:XX:AC:D5:AA:F5:92:10:XX:42:46:7D:82:77
         SHA256: 2D:37:0C:21:XX:DF:D5:53:D2:A7:96:31:4B:XX:92:5F:B3:8A:DE:EF:XX:86:4C:92:0B:BB:BB:12:88:7D:XX:XX
签名算法名称: SHA256withRSA
主体公共密钥算法: 2048 位 RSA 密钥
版本: 3

扩展: 

#1: ObjectId: 2.5.29.35 Criticality=false
AuthorityKeyIdentifier [
KeyIdentifier [
0000: 22 XX B8 1B XX 57 D6 4A   85 82 6D 0F 8D 54 31 78  "....W.J..m..T1x
0010: 64 A4 CF 0A                                        d...
]
]

#2: ObjectId: 2.5.29.19 Criticality=false
BasicConstraints:[
  CA:true
  PathLen:2147483647
]

#3: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 22 F8 B8 1B C8 XX D6 4A   85 82 6D 0F 8D XX 31 78  "....W.J..m..T1x
0010: 64 A4 CF 0A                                        d...
]
]


szhou@Android:~/aosp_works/aosp$ java -jar -Djava.library.path="/home/szhou/aosp_works/aosp/out/host/linux-x86/lib64/"  out/soong/host/linux-x86/framework/signapk.jar  myapk/platform.x509.pem myapk/platform.pk8 myapk/app-debug.apk myapk/app-debug-signed.apk

.

4. 结束语

走过路过,有用到的,记得给点个赞哈~

基于pythonmagick实现pngjpg批量转ico(代码片段)

基于PythonMagick实现png、jpg批量转ico写在前面做这件事的原因:下了一堆png图标想批量转为ico格式的,然后给文件夹用使用方式:if__name__=='__main__':pi=PNG2ICO(r'E:\\resources\\ico',r'E:\\resources\\ 查看详情

实时监控文件内容行数据变化,基于pythonyield句法(代码片段)

实时监控文件内容行数据变化,基于Pythonyield句法importtimedefmy_read(file):whileTrue:line=file.readline()ifnotline:time.sleep(1)else:yieldlineif__name__=='__main__':path=r'demo.txt' 查看详情

python信号系统signal(代码片段)

python信号系统signal myapp.py:importsysimporttimefromblinkerimportsignalasb_sigformat_num=1000000000appsig=b_sig('app_start')@appsig.connectdefdemo(msg,**kw):print(msg,kw,sys._getframe().f_code.co_name,sys._getframe().f_lineno,time.time_ns()/format_num)time.sleep(1)print(msg... 查看详情

正则表达式如何提取中间的数字?

...-99-baidu.com(1)baidu99__baidu.com10)100baidu__99__baidu.com10参考技术A基于Pythonimportrere.findall(r'(\\d+).*?baidu\\.com',r'''百度baidu99-baidu.com(100) 百度baidu_99-baidu.com(10) 百度baidu--99-baidu.com(1) baidu99__baidu.com10)100 baidu__99__bai... 查看详情

requests(代码片段)

importrequestsdefgetHTMLText(url):try:kv='user-agent':'Mozilla/5.0'r=requests.get(url,timeout=30,headers=kv)r.raise_for_status()#如果状态不是200,引发HTTPError异常r.encoding=r.apparent_encodingprint(r.request.headers)print('---------------')returnr.text[:1000]excep... 查看详情

源码剖析androidanr产生机制(代码片段)

源码剖析AndroidANR产生机制如下采用Android源码的android-11.0.0_r48分支进行,不同版本源码差异巨大。ANR的捕获起点为ProcessRecord.appNotResponding方法,本文由appNotResponding逆推ANR的产生机制。源码:frameworks/base/services/core/java/c... 查看详情

flask之蓝图系统(代码片段)

...e('/order')deforder():return'order'使用蓝图之中小型系统详见代码:pro_flask_简单应用程序目录示例.zip目录结构:-flask_pro-flask_test-__init__.py-static-templates-views-order.py-user.py-manage.py_init.pyfromflaskimportFlaskapp=Flask(__name__)fromflask_ 查看详情

如何使用 R 语言在基于多个二进制变量的数据框中创建新变量?

】如何使用R语言在基于多个二进制变量的数据框中创建新变量?【英文标题】:HowtocreateanewvariablewithinadataframebasedonmultiplebinaryvariablesusingRlanguage?【发布时间】:2021-05-0606:39:00【问题描述】:数据框df有13个变量如下,column1-idcolumn... 查看详情

reuqests请求(代码片段)

...TTP协议HTTP,HypertextTransferProtocol超文本传输协议HTTP是一个基于"请求与响应"模式的,无状态的应用层协议HTTP协议采用URL作为定位网络资源的标识。URL格式:http://host[:post][path]URL是通过HTTP协议存取资源的Internet路径,一个UR... 查看详情

004---os模块(代码片段)

os模块和sys模块这两个模块都提供了很多与操作系统之间交互的功能使用importos#当前脚本的工作目录,不是脚本目录print(os.getcwd())#获取指定目录下的所有文件和目录名print(os.listdir())#删除指定路径的文件#os.remove()#删除指定路径的... 查看详情

推荐系统_全

1推荐系统的分类基于应用领域分类:电子商务推荐,社交好友推荐,搜索引擎推荐,信息内容推荐基于设计思想:基于协同过滤的推荐,基于内容的推荐,基于知识的推荐,混合推荐基于使用何种... 查看详情

thinkphp怎么调用常量

...blic/__PUBLIC__只能在模板上使用的。ThinkPHP常量THINK_PATH框架系统目录APP_PATH//应用目录(默认为入口文件所在目录)LIB_PATH//系统类库目录(默认为THINK_PATH.'Library/')CORE_PATH//系统核心类库目录(默认为LIB_PATH.'Think/')MODE_... 查看详情

360关键字搜索(代码片段)

...追加参数到url中代码importrequestsdefgetHTMLText(url):try:keyword='ie':'utf-8','fr':'none','src':'360sou_newhome','q':'Python'r=requests.get(url,params=keyword,timeout=30)r.raise_for_status()r.encoding=r.apparent_encodingreturnr.... 查看详情

基于微博数据应用的hbase实战开发_hbase视频教程

基于微博数据应用的HBase实战开发课程观看地址:http://www.xuetuwuyou.com/course/150课程出自学途无忧网:http://www.xuetuwuyou.com一、课程用到的软件1.centos6.72.apache-tomcat-7.0.473.solr-5.54.zookeeper3.4.65.eclipse-jee-neon-R-win32-x86_64&nb 查看详情

基于stm32c8t6的智能蓝牙小车控制设计-毕设课设资料(代码片段)

stm32最小系统(10r)型号具体为STM32F103C8T6jdy-31蓝牙模块(10r)L298N继电器模块(10r)直流步进电机版直插电解小车底座50-70r(套装包括四个直流电机四个车轮两块亚克力板车身)#include"stm32f10x_gpio... 查看详情

niagara是啥意思

...战,包括设备连接到企业级的应用,支持互联网的产品和基于互联网自动化系统的开发。参考技术ANiagara[英][naɪ'æɡərə][美][naɪ'æɡərə]n.尼亚加拉河(在加拿大和美国间)急流,洪水;例句:1.Thefamily... 查看详情

用于交叉编译 BBB 应用程序的工具链

...布时间】:2017-06-1413:34:39【问题描述】:我的本​​机是基于ubuntu的14.04LTSx86_64系统,我想为Beagleboneblack交叉编译应用程序和QT程序,这是一个在Debian2015发行版上运行的基于armv7的系统。我应该在我的本地系统上安装哪个工具链... 查看详情

java示例代码_基于它反转字符串数组';s指数

java示例代码_基于它反转字符串数组';s指数 查看详情