zoukankan      html  css  js  c++  java
  • 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文件,生成后放在binclasses

    下面。

    第三步:编译工程源代码,生成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工具就是干这个事情的。

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

  • 相关阅读:
    老罗的OLLYMACHINE
    VGA寄存器一览表
    常用的I/O地址
    使用VESA示例
    打开A20
    Linux 2.2 Framebuffer Device Programming Tutorial
    Linux驱动
    基于Linux核心的汉字显示的尝试
    汉字的动态编码与显示方案
    AT&T语法(一)
  • 原文地址:https://www.cnblogs.com/deman/p/5907837.html
Copyright © 2011-2022 走看看