framework踩坑:aosp/lineageos系统apk签名导出到as进行使用

LineageOS系统应用预置实战:以百度输入法为例的完整配置流程 本文详细讲解了在LineageOS系统中预置第三方应用(以百度输入法为例)的完整流程。从理解系统应用与用户应用的核心区别、准备构建环境、编写Android.mk构建脚本,到集成到系统构建、处理原生库文件,最后深入Framework层修改默认输入法设置。文章不仅提供了可操作的步骤,还深入分析了不同预置方式(可卸载与不可卸载)的原理,并分享了实战中处理.so库文件等常见问题的解决方案,是ROM定制和系统集成的实用指南。 阅读详情

背景:

经常做framework开发或者系统应用开发时候,都会有一个很熟悉的名词“系统签名”,因为有了系统签名才可以有比普通第三方应用更高的权限,很多核心函数才可以进行调用成功等。所以在做系统应用开发经常要把自己的apk进行相关的签名,但是具体怎么对系统应用进行签名呢?
一般可以有如下2个情况:
1、本身系统应用的代码源码集成,Android.bp或mk指定platform签名,就是随aosp系统编译出apk,这种情况只需要对系统进行整编,或者对apk进行单独模块编译make xxxx目标既可以。这样out目录出来的apk就自带了系统前面

2、但是很多公司的系统应用,为了开发效率的提高,或者本身代码就是独立于系统的。他们采用集成方式是apk进行集成,这种其实就和我们android studio开发没啥区别,编译apk也是android studio直接编译的。相当于与系统没有任何耦合,这种编译apk时候就需要考虑使用系统签名才可以。

在这里插入图片描述
但是针对android studio编译的apk如何自带系统签名呢?这个具体怎么做呢?

制作系统签名文件

1、导出lineage或者aosp系统自带的签名文件
源码根目录执行如下命令:

cd build/target/product/security/
ls | grep platform
platform.pk8
platform.x509.pem

可以看到在build/target/product/security/有两个platform的两个文件都拷贝到单独目录

在这里插入图片描述

2、执行命令生成platform.pem文件

openssl pkcs8 -in platform.pk8 -inform DER -outform PEM -out platform.pem -nocrypt

3、执行命令生成的platform.pk12文件

# 生成platform.pk12,别名为platform,密码是:android
openssl pkcs12 -export -in platform.x509.pem -out platform.p12 -inkey platform.pem -password pass:android -name platform

4、生成对应的platform.jks

test@test:~/disk2/platform-signed$ ~/android-studio/jre/bin/keytool -importkeystore -deststorepass android -destkeystore platform.jks -srckeystore platform.p12 -srcstoretype PKCS12 -srcstorepass android
Importing keystore platform.p12 to platform.jks...
Entry for alias platform successfully imported.
Import command completed:  1 entries successfully imported, 0 entries failed or cancelled

Warning:
<platform> uses the MD5withRSA signature algorithm which is considered a security risk.
The JKS keystore uses a proprietary format. It is recommended to migrate to PKCS12 which is an industry standard format using "keytool -importkeystore -srckeystore platform.jks -destkeystore platform.jks -deststoretype pkcs12".


ps:这里最重要就是keytool使用的要和android studio对应的jre目录的一致,一定要注意这里的keytool要注意它对应的java版本,如果java版本不对会导致生成的platform.jks无法被android studio编译,会不断报错Invalid keystore format

Execution failed for task ':app:packageDebug'.
> A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade
   > com.android.ide.common.signing.KeytoolException: Failed to read key platform from store "/home/test/AndroidStudioProjects/ANRDemo/app/platform.jks": Invalid keystore format

* Try:

具体android studio的jre目录确定:
在这里插入图片描述所以我们这里的没有用默认keytool,而是使用~/android-studio/jre/bin/keytool下面的。

做完上面几步既可以目录下看到关键的签名文件platform.jks:

在这里插入图片描述
使用它导入到android studio既可以编译了.

android studio使用签名文件编译

拷贝platform.jks到as过程的app目录:
在这里插入图片描述
然后修改app下面的build.gradle文件

 signingConfigs {
        config {
            storeFile file("platform.jks")
            storePassword 'android'
            keyAlias 'platform'
            keyPassword 'android'
        }
    }
    buildTypes {
        debug {
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.config
        }
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.config
        }
    }

再进行编译:
在这里插入图片描述
编译成果后,进行安装:

test@test:~/AndroidStudioProjects/ANRDemo$ adb install -r app/build/outputs/apk/debug/app-debug.apk
Success

直接可以安装成功了,本身apk属于内置apk

test@test:~/disk2/platform-signed$ adb shell dumpsys package android | grep "signatures:"
    signatures=PackageSignatures{24b8cda version:3, signatures:[b4addb29], past signatures:[]}
test@test:~/disk2/platform-signed$ adb shell dumpsys package com.example.anrdemo| grep signa
    signatures=PackageSignatures{114d882 version:2, signatures:[b4addb29], past signatures:[]}
    signatures=PackageSignatures{114d882 version:2, signatures:[b4addb29], past signatures:[]}

dumpsys可以看到确实属于系统platform签名

本文参考链接:https://mp.weixin.qq.com/s/W6l8ok78SD6gE4e1PD74RA

更多framework干货,请关注下面“千里马学框架”

AOSP -- 第一章 概述 在 AOSP 开源底层与面向消费者的设备之间,还存在一层厂商定制层。厂商定制界面品牌核心修改内容三星一体界面自定义系统界面、多窗口增强、桌面模式、诺克斯安全体系、S Pen 手写笔适配、自研相机架构小米MIUI / 澎湃 OS重度定制界面、自研桌面、控制中心、安全应用、应用双开功能OPPO / 一加色彩 OS / 氧 OS自定义息屏显示、桌面负一屏、禅定模式、定制图库与相机谷歌像素原生体验材质你动态取色主题、像素专属桌面、张量芯片专属优化、像素独占功能华为EMUI / 鸿蒙。 阅读详情

相关推荐

OpenHarmony与安卓人脸门禁系统实战选型指南

人脸识别门禁系统是智慧社区与等保合规建设的核心终端设备,其性能本质取决于底层操作系统对AI推理、硬件调度与离线韧性的支撑能力。安卓基于Linux内核与Binder IPC架构,在高并发、断网、高温等真实边缘场景下易出现延迟抖动、驱动崩溃与活体降级;OpenHarmony采用LiteOS-M实时内核、HDF硬件驱动框架及分布式软总线,实现毫秒级确定性响应、零中断外设管理与弱网自愈同步。技术价值体现在本地模型加载耗时<250ms、断网并发验证数提升4倍、内存泄漏率趋近于零等硬指标。广泛应用于老旧小区改造、金融/

weixin_33755557的博客 357

AOSP Android 13——编译release版签名系统

aosp编译

sway913的博客 3036

使用 release key 对 LineageOS 进行编译和签名

使用 test-key 签署的系统镜像通常无法通过 Google 的 CTS(兼容性测试套件)认证,Google Play 商店、Google 服务框架等应用可能无法正常运行,某些第三方应用(例如银行应用或数字版权管理应用)也可能拒绝在设备上运行。testkey:这是 Android 系统中的默认密钥,主要用于开发和测试环境下的签名,但不应在生产环境中使用。sdk_sandbox:签署与 SDK 沙箱相关的应用或组件,确保开发环境的安全。platform:签署系统框架和其他核心组件,确保这些组件未被篡改。

2738

android开发制作aosp系统签名文件给普通apk签名使用

android apk签名及常见错误解决

angelazhao620的博客 503

Android命令行工具--apksigner

android apk签名工具apksigner

安卓开发&音视频开发 3225

Aosp系统编译定制系统签名

商业化产品,如果使用默认的签名,一是不安全,而是显得没啥技术。就连谷歌官方也说了,不建议使用testkey作为最终发布版的key,因此,定制系统签名就派上用场了。具体使用方法谷歌给了一个大致的说法,我们可以在aosp的自述文件中找到,位置位于,我们来看看光放原文:老实说一般人还真不一定看得懂,因此我决定自己实践一下,然后把实践的过程分享给大家,希望抛砖引玉,让大家少走一些弯路。由于利用系统签名生成keystore的方式网上一大把而且没有太多坑,这里不赘述,只说说如何定制系统的签名。

zhonglunshun的专栏 1735

系统签名客制化——基于LineageOS21

由于AOSP中自带了一个公开的秘钥,LineageOS没有针对签名做任何定制(即便是做了定制我们也需要重新生成,因为这个签名必须随源码发布才能使用),所以我们利用LineageOS编译出来的系统固件是默认使用公版签名的,一些APP厂商为了防止一些不法分子使用自定义的系统来做灰黑产业定制了一些反制策略,其中一项就有检测系统签名是否为公版签名,当我们使用这台机器来登录一些网络账号可能会导致被封号。通过这些不同类型的系统签名,Android 能够为系统中的不同组件和服务提供适当的权限和安全性。

周真真 1898

AOSP中生成android studio 签名文件

签名文件路径: build/target/product/security/ 目录,将platform.pk8和platform.x509.pem两个文件拷贝出来备用 注意:这是Android原生签名文件,有的厂商是定制过的,可能会在vendor目录下面,直接find查找 openssl pkcs8 -inform DER -nocrypt -in platform.pk8 -out platform.pem openssl pkcs12 -export -in platform.x509.pem -ou

Android 2347

Android 系统签名

系统签名方法: 1)添加权限     在AndroidManifest.xml文件下添加android:sharedUserId="android.uid.system" 。 2)在Eclipse中导出无签名的应用文件    在工程中:右键->Android Tools -> Export Unsigned Application Package导出应用 3)找出系统签名

独孤行者—专栏 720

Android ROM解包打包工程化实践:从AVB签名到super分区

ROM解包与打包是Android固件开发的核心基础能力,其本质是遵循AOSP规范对sparse、br、ext4等二进制镜像格式的精准解析与重构。原理层面涉及AVB2.0签名验证、dynamic partition布局解析、Brotli/LZ4压缩解码及SELinux策略兼容性控制;技术价值在于实现可重复、可审计、零人工干预的定制ROM量产流程;典型应用场景包括旧机续命、ODM批量出货和LineageOS适配——尤其在Android 12+系统中,super分区与vbmeta签名链成为绕不开的硬性门槛。本文聚

weixin_34199405的博客 445

Android ROM工程化工作流:从system.new.dat.br到可刷zip的七步实操

Android ROM定制本质上是基于AOSP构建体系的系统级工程实践,其核心在于理解镜像分层结构(如system.new.dat.br的sparse+LZ4压缩机制)、分区依赖关系(system/vendor分离与HAL耦合)及签名验证链(AVB2.0、OTA签名、SELinux上下文)。掌握ROM解包、修改、重建与签名全流程,需熟悉sdat2img、make_ext4fs、mkbootimg、avbtool等原生工具链,规避GUI工具常见的压缩算法黑箱、签名失效与挂载点错位问题。该能力广泛应用于第三方R

weixin_33841722的博客 296

Android 应用添加系统签名权限介绍

Android 应用添加系统签名就能获取到系统权限调用一些系统接口,添加系统签名的方式主要包括:在Android Studio中配置签名文件生成apk 和 在源码目录编译添加系统签名生成apk。本文介绍的都是一些基础的签名知识,后续延伸介绍相关权限内容。有兴趣的可以进行了解。android {。。。//证书信息在这里配置main {storeFile file("./platform.jks") //签名文件路径,根目录release {

allen_xu_2012_new的博客 4127

CM系ROM解包打包原理与工程实践指南

Android ROM解包打包并非简单文件压缩解压,而是涉及Brotli/Sparse/Ext4/SELinux四层嵌套结构的逆向工程。其核心原理在于物理存储、逻辑卷与文件系统的三重空间映射,技术价值体现在对分区对齐、AVB签名、OTA元数据及动态分区(super)的精准控制。典型应用场景包括红米第三方ROM适配、MTK平台定制、LineageOS迁移等工程任务。本文深入解析system.new.dat.br解包失败、boot.img校验不通过、刷机黑屏等高频问题的技术根因,聚焦CM系ROM特有的构建逻辑与

weixin_33804582的博客 354

iOS framework动态库重签名

真机上运行 .framework 时,如果报如下信息时表示framework动态库没有签名,需要进行重签名: dyld: Library not loaded: @rpath/XX.framework/XX Referenced from: /var/containers/Bundle/Application/DF33E1CB-0A69-4303-A22A-686E643DE922/iDoctors.app/iDoctors Reason: no suitable image found. ...

qq_31432773的博客 1938

Android开发 给APK打上Android平台系统签名

Android开发 给APK打上Android平台系统签名

Android应用开发工程师 2729

计算机视觉——多视图几何

多视图几何1.前言1.1 多视图几何概念2. 基本原理2.1 对极几何2.2 基础矩阵2.2.1 基础矩阵推导2.2.2 求解基础矩阵3. 实验过程3.1 实验数据准备3.2 实验代码3.3 实验结果及分析4. 实验中遇到的问题 1.前言 1.1 多视图几何概念 多视图几何是利用在不同视点所拍摄图像间的关系,来研究照相机之间或者特征之间关系的一门科学。 多视图几何(Multiple View ...

RuiMa的博客 7715

一加七Pro刷Lineageos21(kernelsu+MicroG)

前几天我已经刷了Lineageos21(一加七Pro刷lineageos21(kernelsu+gapps)),但是体验下来有两个很严重的bug:无法接打电话,没有声音。收短信倒是很正常,但电话打进来只会显示号码,不会显示接听界面(对方那边显示正在通话中,也就是挂断了),拨打电话会显示已结束。测试发现是刷了kernelsu内核导致的,如果只是刷gapps使用正常,所以想自己编译一个kernelsu试试。

Qwertyuiop2016的博客 8286

从零开始玩转Franka Panda机器人

本文总结了笔者在学习使用Franka Panda机器人时的一些方法和经验总结。

止于至玄 1万+
上一篇: 安卓app/framework开发中meta-data数据剖析作用及实战
下一篇: am trace-ipc使用小技巧之Binder服务端方法systrace打印剖析
千里马学框架
博客等级 码龄6年 1万+粉丝 650原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千里马学框架

帮助你了,就请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值