Apk组成

resources.arsc 编译后的二进制资源文件。
classes.dex 是.dex文件。最终生成的Dalvik字节码。
AndroidManifest.xml 程序的全局清单配置文件。
res 是uncompiled resources。存放资源文件的目录。
META-INF 是签名文件夹。 存放签名信息
MANIFEST.MF(清单文件):其中每一个资源文件都有一个SHA-256-Digest签名,MANIFEST.MF文件的SHA256(SHA1)并base64编码的结果即为CERT.SF中的SHA256-Digest-Manifest值。
CERT.SF(待签名文件):除了开头处定义的SHA256(SHA1)-Digest-Manifest值,后面几项的值是对MANIFEST.MF文件中的每项再次SHA256并base64编码后的值。
CERT.RSA(签名结果文件):其中包含了公钥、加密算法等信息。首先对前一步生成的MANIFEST.MF使用了SHA256(SHA1)-RSA算法,用开发者私钥签名,然后在安装时使用公钥解密。最后,将其与未加密的摘要信息(MANIFEST.MF文件)进行对比,如果相符,则表明内容没有被修改。

具体打包流程

1.aapt工具会在我们编码时打包res资源文件,生成R.java、resources.arsc和res文件。

2.aidl工具解析接口定义文件然后生成相应的Java代码接口供程序使用。如果项目没有用到aidl则不会执行这一步。

3.Java Compiler阶段,将R.java,aidl生成的java文件,以及我们程序的java代码,通过Java编译器(javac)编译成.class文件。

4.通过dx工具,将所有.class文件处理成.dex文件。

5.通过apkbuilder工具将resources.arsc、res文件、assets文件和classes.dex一起打包生成apk。

6.通过Jarsigner工具对上面的apk进行签名

7.通过zipalign工具对签名后的apk进行对齐处理。

Apk安装流程

复制APK到/data/app目录下,解压并扫描安装包。
资源管理器解析APK里的资源文件。
解析AndroidManifest文件,并在/data/data/目录下创建对应的应用数据目录。
然后对dex文件进行优化,并保存在dalvik-cache目录下。
将AndroidManifest文件解析出的四大组件信息注册到PackageManagerService中。
安装完成后,发送广播。

Android签名机制

Android 应用的签名工具有两种:

jarsigner:jdk 自带的签名工具,可以对 jar 进行签名。使用 keystore 文件进行签名。生成的签名文件默认使用keystore 的别名命名。
signAPK:Android sdk 提供的专门用于 Android 应用的签名工具。 signapk.jar是Android源码包中的一个签名工具。代码位于Android源码目录下,signapk.jar 可以编译build/tools/signapk/ 得到。 使用 pk8、x509.pem 文件进行签名。其中 pk8 是私钥文件,x509.pem 是含有公钥的文件。生成的签名文件统一使用“CERT”命名。

jarsigner和signAPK的区别:

Android提供了两种对Apk的签名方式,一种是基于JAR的签名方式,另一种是基于Apk的签名方式,它们的主要区别在于使用的签名文件不一样: jarsigner使用keystore文件进行签名;apksigner除了支持使用keystore文件进行签名外,还支持直接指定pem证书文件和私钥进行签名。

签名过程:

1、计算摘要:
通过Hash算法提取出原始数据的摘要。
2、计算签名:
再通过基于密钥(私钥)的非对称加密算法对提取出的摘要进行加密,加密后的数据就是签名信息。
3、写入签名:
将签名信息写入原始数据的签名区块内。

校验过程:

签名验证是发生在APK的安装过程中
1、计算摘要
首先用同样的Hash算法从接收到的数据中提取出摘要。
2、解密签名:
使用发送方的公钥对数字签名进行解密,解密出原始摘要。
3、比较摘要:
如果解密后的数据和提取的摘要一致,则校验通过;如果数据被第三方篡改过,解密后的数据和摘要将会不一致,则校验不通过。

V1签名和V2签名的改变

V2计算加快签名速度,保证META-INFO目录不会被篡改。

Apk打包、安装、签名相关推荐

  1. 关于android3.0版本的apk打包安装失败的问题

    关于android3.0版本的apk打包安装失败的问题 最近遇到做项目遇到的一个坑,现在来总结一下,方便记录. 我用的as版本为3.0.1,直接连接电脑安装app是没有问题的,但是在签名打包apk以后 ...

  2. Apk打包-安装过程

    App的打包过程 打包过程: 使用aapt来打包res资源文件,生成R.java.resources.arsc和res文件 处理.aidl文件,生成对应的Java接口文件 通过Java Compile ...

  3. 安卓逆向_1 --- 逆向环境配置、APK 文件结构、APK 打包流程

    哔哩哔哩:https://www.bilibili.com/video/BV1UE411A7rW?p=1 Android 逆向工程师系统培训‹第九期›( 课程目录 ):https://ke.yijin ...

  4. Android中APK打包流程

    aapt: android application package tool,SDK (Android打包流程图) #Android打包流程 1.通过aapt工具将 资源文件(res).清单文件(An ...

  5. 【朝花夕拾】Android性能篇之(四)Apk打包

    前言 转载请声明,转自[https://www.cnblogs.com/andy-songwei/p/9721337.html],谢谢! APK,即Android Package,是将android程 ...

  6. Android打包流程-签名

    编译任务 META-INF主要用来存储当前的apk的签名信息, 与AP相关的签名信息有下面两个: validateSigningDebug packageDebug 校验签名文件 会先通过valida ...

  7. java打包apk_Android中APK打包流程

    aapt: android application package tool,SDK (Android打包流程图) #Android打包流程 1.通过aapt工具将 资源文件(res).清单文件(An ...

  8. android+apk+反编译和再签名打包,Android:apk反编译步骤,打包、签名和逆向工程经验总结...

    思路一.apktool1.通过apktool反编译出资源和smaliapktool d MobileManager.apkF:\Android\decompile\apktoolapktool d M ...

  9. 【Android 安装包优化】APK 打包流程 ( 文件结构 | 打包流程 | 安装流程 | 安卓虚拟机 )

    文章目录 一.APK 文件结构 二.APK 打包流程 三.APK 安装流程 四.安卓虚拟机 一.APK 文件结构 Android 应用的安装包时 以 " .apk " 为后缀的 A ...

最新文章

  1. IPV6在WINXP、WIN2003、WIN7下的网络配置
  2. Asp.net常用的操作函数
  3. 详解python中的round()函数
  4. 导航栏与scrollerview(或scrollerview的子类)
  5. 计算机专业有什么血泪建议吗?
  6. 工作259:uni--页面--验证码添加
  7. 蜕变成蝶~Linux设备驱动之字符设备驱动
  8. 洛谷入门题P1008、P1035、P1423、P1424、P1980题解(Java语言描述)
  9. 爱因斯坦谜题:谁养鱼(C#版)
  10. java高级工程师认证考试_ACAA 认证Java开发工程师
  11. 服务器端请求伪造——SSRF
  12. while循环的用法
  13. 苹果个人开发者账号审核
  14. Win系统 - 微星 GS65 笔记本电脑开机黑屏
  15. Python 3 字符串 split( ) 方法
  16. python中使用ffmpeg合并音频与视频_FFMpeg无损合并视频的多种方法
  17. 零基础自学python计划_「经验分享」python零基础学习规划与建议!
  18. 封校大学生在宿舍无聊玩起图像大找茬——一个关于游戏的练手小项目(一起领略Python脚本的风采吧)
  19. 机器视觉技术在钢带缺陷检测的应用
  20. 论文阅读11——《Mutual Boost Network for Attributed Graph Clustering》

热门文章

  1. 编程语言的学习笔记---学渣自用版
  2. SolidWorks2016工程图中标记零件质心
  3. proguard代码混淆问题
  4. idea 导出 war包
  5. Java虚拟机的运行过程 西安尚学堂
  6. MySQL高可用架构知识整理
  7. 父母说过的一些话//2021-2-17
  8. 太经典了,早知道这些,人生一定改写啊
  9. B站 ‘顶流‘ 实战项目,yyds
  10. SASS界面编译工具—Koala的使用及中国镜像下载