android 65535 多dex文件方案

快过年了,项目进度放换了,看android 热修复方案的时候,顺便把多dex拆分方案,看了一下。


1.前提执行备案

     方案需要大家了解只是:

  1.ant编译android项目

    step 1: 下载安装

        step 2: 跟android项目添加ant编译方式。参考   android update proejct -p ./

        step 3: 然后在项目的根目录中运行:ant debug 或者ant releces


  2.android 编译apk过程

  大概流程:

step 1. 收集所有的java文件,包括:R.java(通过android aapt生成),.java文件,.aidl文件(通过android AIDL 工具生成)


step 2.将生成的java文件,调用javac编译为.class文件


step  3.执行代码混淆


step 4.将所有的.class文件,通过android dex工具,打包为一个.dex文件()。


step 5. 将res,asset,dex,打包为apk


step 6. 签名


以上是android apk编译的大概流程。


2. 拆分dex原理:

        相关原来以及问题,个人感觉: android 多dex方案 整理的不错,就不在赘述。

3.实现方案

      整体方案参考 上面连接描述的。这个方案并没有自己重写android apk编译流程的build.xml文件。只是将android 原来的(%ANDROID_HOME%/tools/ant/build.xml,复制到项目中,将原来的文件做了些小的添加,

     整体方案如下:

     1.在android 编译流程中 step 3代码混淆执行完成后,将需要拆分的class文件移动别的文件夹中

     2. 在android 编译流程中 step 4中,当主dex文件执行完成后,在将需要拆分的class文件执行一次dex

     3.在android编译流程中 step 5之前,将拆分出来的dex文件复制到asset/dex(路径可以随意指定)目录中

     4.编译结束后,将复制到asset/dex文件中的dex文件删除

     5. 在apk的Application的oncreate中通过,反射,将asset/dex文件夹中的所有dex文件,加载到ClassLoader中,见:MultiDex.java
    

     下面进入主题:

    
      step 1: 配置项目可以使用ant编译,参考上面ant使用
                   在生成的build.xml中添加:
                   

    <!-- 拆分dex,从build_apk.xml移动到这里 -->

    <property name="out.dir" value="bin" />

    <property name="out.absolute.dir" location="${out.dir}" />

    <property name="asset.dir" value="assets" />

    <property name="asset.absolute.dir" location="${asset.dir}" />




      step 2 :将(%ANDROID_HOME%/tools/ant/build.xml 复制到项目的跟目录下,名称可以随意命名
                  A.我将android默认的build文件修改为:build_apk.xml

                  B. 修改ant默认的build.xml最后一句:<import file="${sdk.dir}/tools/ant/build.xml" />为: < import file ="build_apk.xml" />

                  C.定义代码混淆后执行的target,代码位置在<target name="-obfuscate">前面加入:
                        <!-- add by shehonghao ,拆分dex文件,开始-->
                        <!-- 代码混淆后执行 -->
                        <target name="-post-obfuscate"/>
                     <!-- add by shehonghao ,拆分dex文件,结束-->


                  D.在target:<target name="-obfuscate">的最后面加入:
                       <!-- add by shehonghao,拆分dex文件,开始-->
                      <!-- 代码混淆结束后,开始拆封class文件 --> 
                     <antcall target="-post-obfuscate"></antcall>
                     <!-- add by shehonghao,拆分dex文件,结束-->

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值