Android

个人Android学习总结


生成 frameworks/base/preloaded-classes文件

<p>如何生成 frameworks/base/preloaded-classes文件</p> <p>1.修改WritePreloadedClassFile.java 文件 具体文件路径:frameworks/base/tools/preload/WritePreloadedClassFile.java</p> <p>该类中有两个比较重要的定义:</p> <p>static final int MIN_LOAD_TIME_MICROS = 1250;</p> <p>static final int MIN_PROCESSES = 10;</p> <p>备注:</p> <p>MIN_LOAD_TIME_MICROS:他是一个临界值,表示装载一个类,花费的时间大于1250微秒。</p> <p>MIN_PROCESSES:也是一个临界值,表示一个类至少被10个进程装载。</p> <p>Policy:策略类他会定义排除某些服务进程中,以及某些固定的类。</p> <p>这个函数主要工作如下:</p> <p>1.1、 创建preloaded-classes,写入注释信息(如第1步)</p> <p>1.2、 遍历root.loadedClasses(所有装载的类信息),把符合条件的Class放入预加载文件中。具体条件如下:</p> <p>1.2.1、 Policy.isPreloadable不属于策略排除之外的类。</p> <p>1.2.2、 names.size() &gt;= MIN_PROCESSES 至少被10个进程加载的类</p> <p>1.2.3、 (和1.2或关系) 至少被两个进程加载并且加载时间大于1250微秒</p> <p>1.3 、遍历root.processes装载类涉及的进程,内部的所有Operation(一个Operation包含一个类的加载开始时间,结束时间等),满足如下条件加入的类加入预加载文件。</p> <p>1.3.1、 proc.fromZygote()(该进程的父进程不为NUll并且是Zygote进程)&amp;&amp; !Policy.isService (该进程不属于Policy中制定的服务进程)</p> <p>1.3.2 、shouldPreload() (不属于策略排除之外的类,并且加载时间大于1250微秒)</p> <p>1.4 、这个函数就是所有Zygote进程中加载过的类并且不属于策略排除之外的类,都要加入到预加载文件中。</p> <p>1.5、 把前面三步中获取的需要加入预加载文件中的类toPreload写入预加载文件中。</p> <p>2.重新编译frameworks/base/tools/preload/中的所有源码</p> <p>source build/envsetup.sh lunch 24 mmm frameworks/base/tools/preload/ 可以看到编译完成之后生成的文件路径:./out/host/linux-x86/framework/preload.jar</p> <p>先将frameworks/base/preloaded-classes文件删除 然后在linux服务器终端android源码根目录下面这条命令:</p> <p>java -Xss512M -cp ./out/host/linux-x86/framework/preload.jar WritePreloadedClassFile ./frameworks/base/tools/preload/20100223.compiled</p> <p>就会在frameworks/base/下生成 preloaded-classes文件</p>

页面列表

ITEM_HTML