【安卓的签名和权限】

Android 编译使用哪个key签名?

一看Android.mk

在我们内置某个apk的时候都会带有Android.mk,这里面就写明了该APK使用的是什么签名,如:

LOCAL_CERTIFICATE := platform

表明使用的是platform签名

LOCAL_CERTIFICATE := PRESIGNED

表明使用的是apk原本的签名,记住这里的PRESIGNED需要大写

二看产品自定义秘钥

大部分公司在自定义自己的秘钥的时候,都会做出如下修改

  1. 在产品的mk中指定PRODUCT_DEFAULT_DEV_CERTIFICATE,如:
    device/amlogic/产品名/产品名.mk:
# android sign key
PRODUCT_DEFAULT_DEV_CERTIFICATE := vendor/xxxx/android-certs/releasekey


# Here is a customization of which key signature to use
ifeq ($(DEFAULT_SYSTEM_DEV_CERTIFICATE),vendor/xxxx/android-certs/releasekey)
BUILD_KEYS := release-keys
endif
  1. 一旦指定了PRODUCT_DEFAULT_DEV_CERTIFICATE就不会再使用默认的testkey
    build/core/config.mk文件:
# The default key if not set as LOCAL_CERTIFICATE
ifdef PRODUCT_DEFAULT_DEV_CERTIFICATE
  DEFAULT_SYSTEM_DEV_CERTIFICATE := $(PRODUCT_DEFAULT_DEV_CERTIFICATE)
else
  DEFAULT_SYSTEM_DEV_CERTIFICATE := build/make/target/product/security/testkey
endif
.KATI_READONLY := DEFAULT_SYSTEM_DEV_CERTIFICATE

可以看到在没有定义PRODUCT_DEFAULT_DEV_CERTIFICATE的情况下默认使用的是testkey,但是如果我们定义了,就会改换路径为你自定义的路径。

三看编译模式

system/sepolicy/prebuilts/api/30.0/private/keys.conf

[@PLATFORM]
ALL : $DEFAULT_SYSTEM_DEV_CERTIFICATE/platform.x509.pem

[@MEDIA]
ALL : $DEFAULT_SYSTEM_DEV_CERTIFICATE/media.x509.pem

[@NETWORK_STACK]
ALL : $MAINLINE_SEPOLICY_DEV_CERTIFICATES/networkstack.x509.pem

[@SHARED]
ALL : $DEFAULT_SYSTEM_DEV_CERTIFICATE/shared.x509.pem

# Example of ALL TARGET_BUILD_VARIANTS


[@RELEASE]
ENG       : $DEFAULT_SYSTEM_DEV_CERTIFICATE/releasekey.x509.pem
USER      : $DEFAULT_SYSTEM_DEV_CERTIFICATE/releasekey.x509.pem
USERDEBUG : $DEFAULT_SYSTEM_DEV_CERTIFICATE/releasekey.x509.pem

不同的编译模式使用了不同的默认密钥
这里很奇怪,DEFAULT_SYSTEM_DEV_CERTIFICATE到底是直接选定了密钥文件还是只是文件存储路径。

总结:

  1. 内置apk,签名要看mk文件中的LOCAL_CERTIFICATE,指定是谁就是谁
  2. 如果没有指定LOCAL_CERTIFICATE,使用的是产品自定义的秘钥以及编译模式
  3. 如果产品没有指定自定义秘钥,那么就是testkey

keystore签名

其实这部分我不是很明白,我这边的需求客户那边的一个apk没有足够的权限,我需要对其使用platform签名以提权。
使用.pem和.pk8的签名
使用.pem和.pk8的签名文件签名的过程很简单,我之前的【生成签名文件release key,通过Android源码对apk进行签名】文章的最后一句就是

java -Djava.library.path="prebuilts/sdk/tools/linux/lib64" -jar ./prebuilts/sdk/tools/lib/signapk.jar ./build/make/target/product/security/platform.x509.pem ./build/make/target/product/security/platform.pk8 app.apk app_signed.apk

使用keystore签名
但是使用keystore签名遇到一些麻烦,先是报错,我将apk改成zip然后删掉一个文件夹之后解决。然后签名成功但是安装的时候又爆了一个错,捣鼓半天发现需要v2签名。不能用“jarsigner”

adb install signed-anydesk_v4.apk
Performing Streamed Install
adb: failed to install signed-anydesk_v4.apk: Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES: Scanning Failed.: No signature found in package of version 2 or newer for package com.anydesk.anydeskandroid]

错误信息表明在 APK 中找不到版本为 2 或更新的包的签名。

  • v1 方案:基于 JAR 签名,采用的签名工具为 jarsigner
  • v2 方案:APK 签名方案 v2,在 Android 7.0 引入,采用的签名工具为 apksigner
  • v3 方案:APK 签名方案v3,在 Android 9.0 引入,采用的签名工具为 apksigner
    我最后换一个命令才终于完成
// --ks [签名证书路径]
// --ks-key-alias [别名]
// --ks-pass pass:[KeyStore密码]
//  --key-pass pass:[签署者的密码]
//  --out [output.apk] [input.apk]

java -jar apksigner.jar sign --ks android.keystore --ks-key-alias cmccsdk --ks-pass pass:123456 --key-pass pass:123456 --out output.apk input.apk

完成签名后,可以用以下命令查看APK采用的签名方案。
// 验证APK采用的是V1、V2 还是V3签名

apksigner verify -v test.apk

权限-signature 签名权限

签名权限描述:
只有当应用A 与 定义权限的应用B 或 OS 使用相同的证书签名时,系统才会向应用授予签名权限。
在这里插入图片描述

  1. 应用A 和 应用B 具有相同的证书签名 :两个LOCAL_CERTIFICATE := PRESIGNED 具有相同证书签名应用。
    如果应用B先安装的,而且已经申请过权限,(A和B有相同的证书签名)则系统会在不通知用户或征得用户明确许可的情况下,给A应用自动授予这些signature权限。
  2. 应用A 和 系统签名应用
    使用platform或者testkey等其他签名
    除了签名权限之外还有普通权限,特殊权限,运行时权限,这里推荐
    https://blog.csdn.net/u012514113/article/details/128865859

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/286907.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MPI并行程序设计 —— C 和 fortran 环境搭建 openmpi 示例程序

1.安装环境 wget https://download.open-mpi.org/release/open-mpi/v4.1/openmpi-4.1.6.tar.g tar zxf openmpi-4.1.6.tar.gz cd openmpi-4.1.6/ 其中 configure 选项 --prefix/.../ 需要使用绝对路径,例如: ./configure --prefix/home/hipper/ex_open…

使用UDP和JSON在C#中高效发送结构体数据

使用UDP和JSON在C#中高效发送结构体数据 引言 在许多网络编程场景中,我们经常需要在不同的应用程序或服务之间发送和接收数据。UDP(用户数据报协议)因其低延迟和少开销的特点,在需要快速数据传输的场景中非常有用。本文介绍了如何…

VS 2022 控制台程序运行时不显示控制台

Visual Studio 2022,C#控制台程序运行时不显示控制台。此外,C#程序修改运行时的程序名。 文章目录 不显示控制台修改运行时的程序名打包成.exe 文件 不显示控制台 1 选中需要项目,右击属性,选中常规。 2 将输出类型从控制台改为…

介绍两本书《助推》与《耐力》

冠历最后一年已经养成了没有冲突的情况下每天跑步、读书的习惯,今天突发奇想:是否重新挑战下每日写作。 ​ 今天介绍两本书。第一本是《助推》,这本书是由于真友 吾真本 的介绍开始读的。 一句话介绍这本书,那就是:如果…

MySQL将多条数据合并成一条的完整示例

数据库中存的是多条数据,展示的时候需要合并成一条 数据表存储形式如下图 以type分组,type相同的算一条,且保留image和link的所有数据,用groupBy只保留一条数据 解决方案:用GROUP_CONCAT 完整语法如下 group_concat…

Go后端开发 -- main函数 变量 常量 函数

Go后端开发 – main函数 & 变量 & 常量 & 函数 文章目录 Go后端开发 -- main函数 & 变量 & 常量 & 函数一、第一个main函数1.创建工程2.main函数解析 二、变量声明1.单变量声明2.多变量声明 三、常量1.常量的定义2.优雅的常量 iota 四、函数1.函数返回…

【FPGA/verilog -入门学习15】vivado FPGA 数码管显示

1,需求:使用xc720 开发板的8个数码管显示12345678 2,需求分析: 75hc595 1,74hc595驱动,将串行数据转换成并行输出。对应研究手册 2,发送之前将要发的数据,合并成高8位:SEG,低8位&…

二蛋赠书十三期:《一书读懂物联网》

前言 大家好!我是二蛋,一个热爱技术、乐于分享的工程师。在过去的几年里,我一直通过各种渠道与大家分享技术知识和经验。我深知,每一位技术人员都对自己的技能提升和职业发展有着热切的期待。因此,我非常感激大家一直…

代码随想录算法训练DAY18|二叉树5

算法训练DAY18|二叉树5 513.找树左下角的值 力扣题目链接 给定一个二叉树,在树的最后一行找到最左边的值。 示例 1: 示例 2: 思路 本题要找出树的最后一行的最左边的值。此时大家应该想起用层序遍历是非常简单的了,反而用递归的话会比较难一点。 我…

云原生学习系列之基础环境准备(虚拟机搭建)

最近由于工作需要开始学习云原生相关内容,为方便学习操作,准备在外网搭建自己的环境,然后进行相关的练习,搭建环境的第一步便是虚拟机的安装。 基础软件 这里我用到的是CentOS-7-x86_64的操作系统。 链接:https://pa…

使用宝塔在Linux面板搭建网站,并实现公网远程访问

文章目录 前言1. 环境安装2. 安装cpolar内网穿透3. 内网穿透4. 固定http地址5. 配置二级子域名6. 创建一个测试页面 前言 宝塔面板作为简单好用的服务器运维管理面板,它支持Linux/Windows系统,我们可用它来一键配置LAMP/LNMP环境、网站、数据库、FTP等&…

【Web】CTFSHOW元旦水友赛部分wp

目录 ①easy_include ②easy_web ③easy_login web一共5题,我出了3题,巧的是好像师傅们也只出了3题,跨年拿旗还是很快乐的,下面直接贴出自己的wp. ①easy_include pearcmd不解释 这里主要是 ,file://协议支持以fi…

CSS animation动画和关键帧实现轮播图效果HTML

CSS animation动画和关键帧实现轮播图效果HTML 这轮播图效果使用h5和css3实现效果&#xff0c;不需要js控制&#xff0c;但是其中的缺点就是不能使用鼠标进行切换效果。 具有代码如下 <!DOCTYPE html> <html lang"en"><head><meta charset&quo…

使用echarts的bmap配置项绘制区域轮廓遮罩

示例图 代码 <template><div id"map" style"width: 100%; height: 100vh"></div> </template><script> import * as echarts from "echarts"; import "echarts/extension/bmap/bmap"; export default…

第28关 k8s监控实战之Prometheus(一)

------> 课程视频同步分享在今日头条和B站 大家好&#xff0c;我是博哥爱运维。对于运维开发人员来说&#xff0c;不管是哪个平台服务&#xff0c;监控都是非常关键重要的。 在传统服务里面&#xff0c;我们通常会到zabbix、open-falcon、netdata来做服务的监控&#xff0…

Zookeeper之Java客户端实战

ZooKeeper应用的开发主要通过Java客户端API去连接和操作ZooKeeper集群。可供选择的Java客户端API有&#xff1a; ZooKeeper官方的Java客户端API。第三方的Java客户端API&#xff0c;比如Curator。 接下来我们将逐一学习一下这两个java客户端是如何操作zookeeper的。 1. ZooKe…

2.4信道复用技术

目录 2.4信道复用技术2.4.1频分复用、时分复用和统计时分复用频分复用FDM&#xff08;Frequency Division Multiplexing&#xff09;时分复用TDM&#xff08;Time Division Multiplexing&#xff09;统计时分复用STDM&#xff08;Statistic TDM&#xff09; 2.4.2波分复用2.4.3…

IIS通过ARR实现负载均衡

一、实现整体方式介绍 项目中部署在windows服务器上的项目,需要部署负载均衡,本来想用nginx来配置的,奈何iis上有几个项目,把80端口和443端口占用了,nginx就用不了了(因为通过域名访问的,必须要用80和443端口),只能通过IIS的方式实现了。 这里用2个服务在一台机器上…

mysql: 2006, ‘MySQL server has gone away‘

一、错误问题 这个问题是在迁移数据库、备份还原或数据导入时报错&#xff1a;2006, ‘MySQL server has gone away‘ 二、出现原因 sql操作的时间过长&#xff0c;或者是传送的数据太大(例如使用insert ... values的语句过长&#xff0c; 这种情况可以通过修改max_allowed_pac…

魔改Stable Diffusion,开源创新“单目深度估计”模型

单目深度估计一直是计算机视觉领域的难点。仅凭一张 RGB 图像,想要还原出场景的三维结构,在几何结构上非常不确定,必须依赖复杂的场景理解能力。 即便使用更强大的深度学习模型来实现&#xff0c;也面临算力需求高、图像数据注释量大、泛化能力弱等缺点。 为了解决这些难题&a…