Android 热修复,插件式开发---基本知识

Android插件技术已经出来很久了,从 包建强 的那篇《Android插件化:从入门到放弃》出来以后,插件化技术的场景也明朗了。

app插件牵涉到很多基础

1.app的启动流程

过程分析,首先从launcher上面点击app图标,然后到activity的OnResume。

在AMS里面调用startProcessLocked,首先开启一个新的进程,同步一个主线程。

Android 热修复,插件式开发---基本知识

上图是启动默认activity的流程。

1.1launcher->AMS(system_server) launcher 首先发送启动activity的请求

1.2AMS判断该请求为新的app创建请求,该流程非常复杂,最终会走到startProcessLocked, 创建process:

Process.ProcessStartResult startResult = Process.start(entryPoint, app.processName, uid, uid, gids, debugFlags, mountExternal, app.info.targetSdkVersion, app.info.seinfo, requiredAbi, instructionSet, app.info.dataDir, refreshTheme, entryPointArgs);

1.3 调用Zygote启动新的进程,其实就是fork一个标准的进程。

1.4 启动activityThread.main方法,获取name之类的参数,绑定到zygote启动的新进程。

1.5 把新进程bind 到AMS。

1.6 AMS启动新进程里面的activity。

2.apk打包流程&自动打包技术。

第一步:打包资源文件,生成R.java。

首先看aapt的源码:Resource.cpp 里面关键函数buildResources

buildResource里面,检测AndroidManifest.xml的合法性,然后开始makeFileReource,把res下的资源文件

加入到ResourceTable中。

调用compileResourceFiles,把value-xml文件解析,然后加入到resource.arsc 文件。

compileResourceFiles最终会调用parseAndAddEntry, 把资源写入到R.java中。

然后是调用compileXmlFiles,处理其他的drawable,anim,layout等xml文件。

resource.arsc 就是ResouceTable。

关于这个文件的解析:http://www.cnblogs.com/feng9exe/p/5676802.html

最终aapt会把assect里面的files,resource.arsc,AndroidManifest.xml等统一打包为“*.ap_”文件。

第二步:AIDL编译 生成对应的.java文件。AIDL的编译过程其实就是把AIDL文件自动生成java文件,生成后放在bin\classes下面。

第三步:编译工程源代码,生成class文件。编译所有src下面的代码,生成对应的class文件。假设一般情况下,只是使用Android SDK开发而已。

第四步:把class文件编程成dex文件。dx工具主要作用就是把claass转化为dalvik使用的dex文件。消除冗余信息,压缩常量池等。

第五步:打包生成APK文件,打包工具为apkbuilder.主要是把,resource.ap_,dex文件 打包成APK文件,但是没有签名。这里在class文件到dex中 还有一个过程proguard。class+progroud->dex

第六步:签名,目前有2中方式,jarsinger工具,或者signapk工具。

第七步:签名后,字节需要对齐,zipalign工具就是干这个事情的。

至此,整个打包过程就结束了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值