1、
dx sdk/build-tools,class/jar生成dex文件
命令: dx --dex --output 文件名.dex 文件名.jar
2、
zipalign
sdk\build-tools ,apk整理对齐工具。
未压缩的数据开头均相对于文件开头部分执行特定的字节对齐,减少应用运行内存。
https://developer.android.google.cn/studio/command-line/zipalign.html
命令:zipalign [-v] [-f] 4 in.apk out.apk
3、apksigner
sdk\build-tools\24.0.3 以上,apk签名工具
https://developer.android.google.cn/studio/command-line/apksigner.html#options-sign-general
签名:
apksigner sign --ks jks文件地址 --ks-key-alias 别名 --ks-pass pass:jsk密码 --key-pass pass:别名密码 --out out.apk in.apk
4、openssl
密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议。
步骤
1、下载
wget https://www.openssl.org/source/openssl-1.1.0g.tar.gz
2、解压
tar xvf openssl-1.1.0g.tar.gz
3、编译脚本
复制https://wiki.openssl.org/images/7/70/Setenv-android.sh中的内容,修改以 '_' 开头的变量( _ANDROID_NDK 不用管,《export ANDROID_NDK_ROOT=NDK目录》 即可)
在末尾加上
./config shared no-ssl2 no-ssl3 no-comp no-hw no-engine --openssldir=`pwd`/android/x86/openssl --prefix=`pwd`/android/x86
make depend
make all
sudo -E make install CC=$ANDROID_TOOLCHAIN/arm-linux-androideabi-gcc RANLIB=$ANDROID_TOOLCHAIN/arm-linux-androideabi-ranlib
(arm-linux-androideabi- 如果是x86需要为i686-linux-android-)
ActivityManagerService
frameworks/base/ core/java/com/android/server/am/ActivityManagerService.java
Zygote
进程孵化器
SystemServer
由Zygote孵化,核心Service所在进程。
AMS
在SystemServer中启动。最核心的服务,主要负责系统中四大组件的启动、切换、调度及应用程序的管理和调度等工作。
Android Application启动流程
反射替换真实的Application
ContentProvider onCreate获取getContext的特殊处理
Application创建出来后 给到了以下对象的以下成员:
ContextImpl -> mOuterContext ProxyApplication
ActivityThread -> mAllApplications(ArrayList) ProxyApplication
ActivityThread -> mInitialApplication ProxyApplication
LoadedApk -> mApplication ProxyApplication
如何获得这些需要替换掉成员的类型的对象?
ContextImpl 通过 Application的 attachBaseContext 回调的参数获得
ActivityThread 可以通过 ContextImpl 的 mMainThread 属性获得
LoadedApk 可以通过 ContextImpl 的 mPackageInfo 属性获得
项目地址:https://github.com/IanIanIanIan/ProxyGuard