Android APK文件笔记

APK文件其实是一个zip压缩包

APK的常见文件结构如下:

  • AndroidManifest.xml 声明四大组件、权限等信息。解压是无法直接打开的,可以使用apktool等工具解密
  • lib 存放各种架构下的so文件的文件夹 存放的so文件可以使用IDA工具进行修改。
    重打包手段:替换/data/app/packagename/lib下的so为你修改之后的so
    重新打包APK,但是要过签名检验
  • res 存放 未编译的资源文件,存放图片。样式。xml等资源 raw文件未原始文件,存放音频等内容,其他文件会被压缩处理
  • class.dex 源码生成的.class文件,经过转化后成为Android系统可识别的Dalvik Byte Code。
    可使用apktool等工具进行反编译,反编译后的jar文件可能存在部分错误,需要自己去调试。
    反制方法:进行应用加固、代码混淆
    应用加固反制方法:脱壳、去GooglePlay下载应用,因为谷歌是aab文件,安装之后拿出来的APK没带so,需要去安装目录lib下把so给补全
  • resources.arsc 编译过后的资源文件
  • assets 存放的文件可用AssetManager进行获取
  • META-INF用于存放应用的签名和检验信息,

编译过程
aidl文件先转化为java接口文件
资源文件被aapt处理为resources.arsc并且生成R.java
编译器将源码、R.java`aidl生成的Java接口文件编译成.class文件
.class文件和第三方库转化为dex文件,如果遇到65535问题,就要进行分包
c++代码通过NDK编译为指定架构的so文件
打包其他资源生成APK
jarsigner进行签名
zipalign进行优化生成最终APK文件

安装流程:

应用发送安装Intent
PackageInstall启动进入安装流程
复制APK安装包到data/app目录下,解压并扫描安装包,把dex文件(Dalvik字节码)保存到dalvik-cache目录,并data/data目录下创建对应的应用数据目录。

https://blog.csdn.net/u012267215/article/details/88313259
这边文章讲的清楚

系统应用静默安装:
使用反射或者引用framework.jar调用安装方法。

ADB安装
adb install -r 应用APK存放路径

另类的APK安装:
github的blackbox仓库 使用了插件化的思想进行加载APK,可以做你想做的事

你可能感兴趣的:(android,笔记)