【安卓的签名和权限】

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_CERTIFICATEDEFAULT_SYSTEM_DEV_CERTIFICATE := $(PRODUCT_DEFAULT_DEV_CERTIFICATE)
elseDEFAULT_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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java ArrayList在遍历时删除元素

文章目录 1. Arrays.asList()获取到的ArrayList只能遍历,不能增加或删除元素2. java.util.ArrayList.SubList有实现add()、remove()方法3. 遍历集合时对元素重新赋值、对元素中的属性赋值、删除元素、新增元素3.1 普通for循环3.2 增强for循环3.3 forEach循环3.4 str…

TSConfig 配置(tsconfig.json)

详细总结一下TSConfig 的相关配置项。个人笔记,仅供参考,欢迎批评指正! 根目录 {/* 指定编译文件/目录 */"files": [], // 指定被编译的文件"include": [], // 指定被编译文件所在的目录"exclude": [], // 指…

【CFP-专栏2】计算机类SCI优质期刊汇总(含IEEE/Top)

一、计算机区块链类SCI-IEEE 【期刊概况】IF:4.0-5.0, JCR2区,中科院2区; 【大类学科】计算机科学; 【检索情况】SCI在检; 【录用周期】3-5个月左右录用; 【截稿时间】12.31截稿; 【接收领域】区块链…

零基础开发 React+ TS 后台实战课程介绍

下面所有效果均从零开始进行演示开发: 效果演示图: 登录页 仪表盘首页搭建 引导页制作 React 国际化外语切换 React Ant-deign 组件拆分增删改查 涉及知识点 React 图片上传分页查询组件拆分遮罩层演示数据隔离 React 用户管理 React 公告管理 发布…

Github 2023-12-31 开源项目日报 Top10

根据Github Trendings的统计,今日(2023-12-31统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量TypeScript项目3Swift项目1Java项目1HTML项目1Astro项目1Python项目1C项目1Dart项目1Jupyter Notebook项目1C项…

java spring boot 获取resource目录下的文档

主要代码 String filePath"templates/test.xls" ClassPathResource classPathResource new ClassPathResource(filePath); InputStream inputStream classPathResource.getInputStream();目录 主要目录存放再这 代码案例 public void downloadTemplate( HttpS…

3 - 字段约束|MySQL索引|MySQL用户管理

字段约束|MySQL索引|MySQL用户管理 字段约束主键外键 MySQL索引索引介绍优缺点索引使用规则索引的分类索引的管理 用户管理用户授权权限撤销 用户权限追加user表的使用 字段约束 设置在表头上,用来限制字段赋值 包括: 是否允许给…

Modbus 通信协议 二

Modbus 常用缩写 通用Modbus帧结构 -应用数据单元(ADU) Modbus数据模型 Modbus ADU 和 PDU 的长度 Modbus PDU结构 串行链路上的 Modbus 帧结构 Modbus 地址规则 ASCLL 模式 和 RTU 模式的比较 RTU 模式 RTU 模式位序列 帧格式 帧的标识与鉴别 CRC 循环冗…

Vue3-30-路由-嵌套路由的基本使用

什么是嵌套路由 嵌套路由 &#xff1a;就是一个组件内部还希望展示其他的组件&#xff0c;使用嵌套的方式实现页面组件的渲染。 就像 根组件 通过路由渲染 普通组件一样&#xff0c;嵌套路由也是一样的道理。 嵌套路由的相关关键配置 1、<router-view> 标签 声明 被嵌套组…

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

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

vmware安装龙蜥操作系统

vmware安装龙蜥操作系统 1、下载龙蜥操作系统 8.8 镜像文件2、安装龙蜥操作系统 8.83、配置龙蜥操作系统 8.83.1、配置静态IP地址 和 dns3.2、查看磁盘分区3.3、查看系统版本 1、下载龙蜥操作系统 8.8 镜像文件 这里选择 2023年2月发布的 8.8 版本 官方下载链接 https://mirro…

Windows搭建FTP服务器教学以及计算机端口介绍

目录 一. FTP服务器介绍 FTP服务器是什么意思&#xff1f; 二.Windows Service 2012 搭建FTP服务器 1.开启防火墙 2.创建组 ​编辑3.创建用户 4.用户绑定组 5.安装ftp服务器 ​编辑6.配置ftp服务器 7.配置ftp文件夹的权限 8.连接测试 三.计算机端口介绍 什么是网络…

word 常用功能记录

word手册 多行文字对齐标题调整文字间距打钩方框插入三线表插入参考文献自动生成目录 多行文字对齐 标题调整文字间距 打钩方框 插入三线表 插入一个最基本的表格把整个表格设置为无框线设置上框线【实线1.5磅】设置下框线【实线1.5磅】选中第一行&#xff0c;设置下框线【实线…

Plantuml之JSON数据语法介绍(二十五)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

uniapp中uview组件库的DatetimePicker 选择器的用法

目录 基本使用 #年 月 日 #格式化 #限制最大最小值 API #Props #Events #Methods 基本使用 通过show绑定一个布尔值变量&#xff0c;用于控制组件的弹出与收起。通过mode配置选择何种日期格式。 <template><view><u-datetime-picker:show"show&qu…

数据库之索引

1. 索引的定义 索引是一个排序的列表&#xff0c;包含索引字段的值和其对应的行记录的数据所在的物理地址。 索引的作用&#xff1a; 加快表的查询速度&#xff0c;还可以对字段排序。 2. 索引的工作方式 有了索引后&#xff0c;要根据条件查询某行数据时&#xff0c;需要先…

uniapp中的uview组件库丰富的Form 表单用法

目录 基本使用 #Form-item组件说明 #验证规则 #验证规则属性 #uView自带验证规则 #综合实战 #校验错误提示方式 #校验 基本使用 此组件一般是用于表单验证使用&#xff0c;每一个表单域由一个u-form-item组成&#xff0c;表单域中可以放置u-input、u-checkbox、u-radio…

云原生十二问

一、什么是云原生&#xff1f; 云原生是在云计算环境中构建、部署和管理现代应用程序的软件方法。现代企业希望构建高度可扩展、灵活且具有弹性的应用程序&#xff0c;可以快速更新以满足客户需求。为此&#xff0c;他们使用现代工具和技术&#xff0c;这些工具和技术本质上支…

RabbitMQ基础知识

一.什么是RabbitMQ RabbitMQ是一个开源的、高性能的消息队列系统&#xff0c;用于在应用程序之间实现异步通信。它实现了AMQP&#xff08;Advanced Message Queuing Protocol&#xff09;协议&#xff0c;可以在分布式系统中传递和存储消息。 消息队列是一种将消息发送者和接收…

NE555学习笔记-2024

实物图片 NE555引脚图 内部时序图 示列1&#xff0c;红外接收电路 红外接收电路的工作原理&#xff1a;在上述电路中&#xff0c;TSOP1738构成了该电路的主要组成部分&#xff0c;旨在检测来自任何来源的红外信号。这用于检测38 KHz范围的信号&#xff0c;因此命名为“TSOP173…