【安卓的签名和权限】

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.mzph.cn/news/592994.shtml

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

相关文章

SpringBoot整合ElasticSearch实现CRUD操作

本文来说下SpringBoot整合ES实现CRUD操作 文章目录 概述项目搭建ES简单的crud操作保存数据修改数据查看数据删除数据 本文小结 概述 SpringBoot支持两种技术和es交互。一种的jest,还有一种就是SpringData-ElasticSearch。根据引入的依赖不同而选择不同的技术。反正作…

代码随想录算法训练营Day16 | 654.最大二叉树、617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树

LeetCode 654 最大二叉树 本题思路:我们可以看到每次其实这个找最大值,然后创建节点的过程就是一个二叉树的前序遍历的过程。所以,我们可以递归来完成它。 先创找到数组中,最大的值的下标,然后创建根节点然后根据下标…

c语言-整型在内存的存储

文章目录 前言一、整型数值在内存中的存储1.1 整型数值的表示形式1.2 二进制的表示形式1.3 整数在内存中存储 二、大端字节序存储和小端字节序存储2.1 大端字节序存储2.2 小端字节序存储2.3 练习 总结 前言 本篇文章叙述c语言中整型数据在内存中的存储方式。 一、整型数值在内…

Vue学习计划-Vue3--核心语法(一)OptionsAPI、CompositionAPI与setup

1. OptionsAPI与CompositionAPI Vue2的API设计是Options(配置)风格的Vue3的API设计是Composition(组合)风格的 Options API的弊端: Options类型的API,数据、方法、计算属性等,是分散在:data、methods、computed中的,若…

【操作系统xv6】学习记录2 -RISC-V Architecture

说明:看完这节,不会让你称为汇编程序员,知识操作系统的前置。 ref:https://binhack.readthedocs.io/zh/latest/assembly/mips.html https://www.bilibili.com/video/BV1w94y1a7i8/?p7 MIPS MIPS的意思是 “无内部互锁流水级的微…

Maple 2021安装包下载及安装教程

Maple 2021下载链接:https://docs.qq.com/doc/DUk9MQ1BPRHRYWU9s 1.鼠标右键解压到“Maple 2021” 2.选中Setup,鼠标右击选择“以管理员身份运行” 3.点击“Next” 4.选择I accept the agreement,点击“Next” 5.选择软件安装路径&#xff0c…

IDEA JAVA Spring Boot运行Hello World(1.8)

参考资料: Spring Boot运行Hello World - 知乎https://blog.csdn.net/weixin_44005516/article/details/108293228(解决bug)SpringBoot入门第一章:Hello World-java教程-PHP中文网 (仅参考如何运行程序)java 8安装教程 java 8安装教程_java8安装-CSDN博…

力扣:763. 划分字母区间(贪心,哈希)

题目: 给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。 注意,划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍然是 s 。 返回一个表示每个字符串片段的长度…

SpringBoot集成MQTT协议

简介 MQTT 可以被解释为一种低开销,低带宽占用的即时通讯协议,可以用较少的代码和带宽为远程设备连接提供实时可靠的消息服务,它适用于硬件性能低下的远程设备以及网络状况糟糕的环境下,因此 MQTT 协议在 IoT(Interne…

1月3日代码随想录反转二叉树

226翻转二叉树 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 示例 1: 输入:root [4,2,7,1,3,6,9] 输出:[4,7,2,9,6,3,1]示例 2: 输入:root [2,1,3] 输出:[2,3,…

原生JS做别踩白块游戏

思路 创建初始一个按钮并为他添加点击监听开始创建随机方块,并样式_box.offsetTop speed px结合setInterval使得方块不断下移创建和删除方块的原则:box.offsetTop>0(可视区上部没有方块了)时候需要创建一行方块,…

江西速欣商务咨询有限公司:深度解析停息挂账,助您财务重启

停息挂账问题可能对个人或企业财务产生严重影响,但江西速欣商务咨询有限公司以其深度解析停息挂账的专业能力,致力于助您重新启动财务,实现财务的良性发展。 专业团队,深度解析挂账难题 速欣商务咨询拥有一支专业团队&#xff0c…

域名授权验证系统PHP源码,盗版追踪、双重授权和在线加密功能,附带安装教程

源码介绍 PHP域名授权验证系统是一个功能强大的系统,提供了多项功能来保护你的域名和软件的合法性。它包括盗版追踪、域名IP双重授权、在线加密等功能,同时还提供了PHP授权验证更新系统的完整版,方便你进行一键更新和生成自助授权。 盗版追…

【谷歌云】注册谷歌云 创建Compute Engine

文章目录 一、Google Cloud注册1.1 账号信息1.2 付款信息验证1.3 验证成功 二、Compute Engine创建2.1 启动Compute Engine API2.2 创建实例2.3 新建虚拟机实例2.4 等待实例创建完成2.5 查看虚拟机配置信息2.6 创建防火墙规则2.7 SSH远程连接虚拟机 三、参考链接 一、Google Cl…

ChatGPT 4.0真的值得花钱买入吗?

性能提升: ChatGPT 4.0的推出不仅意味着更先进的技术,还代表着更强大的性能。相较于3.5,4.0在处理任务时更为高效,响应更迅速。 更智能的理解: 随着版本的升级,ChatGPT 4.0对语境的理解能力得到了进一步的…

集群部署篇--Redis 集群动态伸缩

文章目录 前言一、redis 节点的添加1.1 redis 的实例部署:1.2 redis 节点添加:1.3 槽位分配:1.4 添加从节点: 二、redis 节点的减少2.1 移除主节点2.1.1 迁移槽位2.1.1 删除节点: 三、redis 删除节点的重新加入3.1 加入…

odoo17 | 用户界面的基本交互

前言 现在我们已经创建了我们的新模型及其 相应的访问权限,是时候了 与用户界面交互。 在本章结束时,我们将创建几个菜单以访问默认列表 和窗体视图。 数据文件 (XML) Odoo在很大程度上是数据驱动的,因此模块定义的…

深度学习MLP_实战演练使用感知机用于感情识别_keras

目录 (1)why deep learning is game changing?(2)it all started with a neuron(3)Perceptron(4)Perceptron for Binary Classification(5)put it all toget…

跨年烟花-Html5实现_附完整源码【可直接运行】

文章目录 🍻前言🔸目录结构⚫完整源码🔵源码分析💮注意事项 💈总结 🍻前言 随着科技的进步和互联网的普及,人们对于跨年庆祝的方式也在不断变化。传统的烟花燃放虽然美丽,但存在环境…

【华为机试】2023年真题B卷(python)-金字塔-微商的收入

一、题目 题目描述: 微商模式比较典型,下级每赚 100 元就要上交 15 元,给出每个级别的收入,求出金字塔尖上的人收入。 二、输入输出 输入描述; 第一行输入N,表示有N个代理商上下级关系。 接下来输入N行,每行…