首页 > 代码库 > Android 热修复,插件式开发---基本知识

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

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

app插件牵涉到很多基础

1.app的启动流程

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

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

技术分享

上图是启动默认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工具就是干这个事情的。

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

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