美文网首页
eclipse 方法超标处理

eclipse 方法超标处理

作者: 有点健忘 | 来源:发表于2019-03-19 14:42 被阅读0次

    来源:
    https://www.jianshu.com/p/e761c0ba0855
    https://www.cnblogs.com/liemng/p/5982221.html

    整理记录下,万一以后用到了。

    将用到的一堆jar合并成一个jar,完事在转换为dex文件

    步骤如下:

    1. 工程根目录下新建build.xml文件
      name:工程的名字
      basedir :基准目录,不懂,反正写个点没啥影响
      destfile:合并后的jar存放的位置以及合并后的jar文件名字
      default:默认的运行目录,不管,反正用不到
      src:后边是我们要合并的lib的路径,记得加上libs目录。
    <?xml version="1.0" encoding="utf-8"?> 
    <project name="SmartPhone" basedir="." default="makeSuperJar"> 
    <target name="makeSuperJar"  description="description"> 
        <jar destfile="all.jar"> 
            <zipfileset src="libs/android-advancedrecyclerview.jar"/>  
            <zipfileset src="libs/android-support-v7-recyclerview.jar"/>         
            <zipfileset src="libs/aws-android-sdk-core-2.6.31.jar"/>
            <zipfileset src="libs/aws-android-sdk-s3-2.6.31.jar"/>
            <zipfileset src="libs/crashlytics.jar"/>
            <zipfileset src="libs/dom4j-2.0.2.jar"/>
        </jar> 
    </target> 
    </project>
    

    工程目录右键,如下图


    image.png

    然后左侧点击builder,右侧点击new,弹框出来选择ant,如下图


    image.png
    弹框如下,分别点击红框的地方,第一个是选择我们刚才新建的那个build.xml文件,第二个选择目标工程即可
    image.png

    点击菜单栏的build project,就可以在控制台看到编译的信息了
    我们上边的build.xml文件destfile 没有相对路径,所以就直接在工程根目录下了,这个自己可以改


    image.png

    合并完jar以后这个ant也就不需要了,要不每次build都执行一次也是浪费,用完可以去下掉勾选了


    image.png
    1. 把这个合并的jar转成dex。使用sdk下的工具dx.bat
      打开command命令窗口,完事把路径切换到dx.bat所在的目录,然后执行下边的命令
      output后边跟的是生成dex文件保存的位置以及名字,最后是要转换的jar文件路径【就是我们上边打包的那个all.jar】
    dx --dex --output=D:\classes2.dex(生成的路径和名称)      路径\myjar.jar
    
    image.png
    注意

    由于apk默认会将项目中的class文件编译成classes.dex,所以这里你需要更改下你的输出文件名,这里这个名字要有规范,严格的命名classes2.dex,classes3.dex
    换句话说这dex文件在这里名字必须是classes2.dex,如果以后这个classex2.dex也超65535了,需要合并新的dex,那么名字就classes3.dex了。

    继续操作

    1. 复制上边生成的classex2.dex文件到工程的src目录下

    2. libs目录下删除用来合并的 jar 。
      但是删除后为了能编译通过我们得使用外部引用:通过工程右键》 bulidPath 下的 add external archives 引用被我们合并的 all.jar

    3. 找个mutildex包导入libs,这个就不要参与合并了。application里用到的不要合并
      完事可以让application继承MultiDexApplication 或者在oncreate里调用multidex的install方法

    4. 测试
      运行后正常安装到手机了,点了下,有个页面就挂了。其他页面正常。
      看下出错的log,提示的是fragment$1找不到,点进去是下边的代码
      看来上边合并的recyclerView的库没加载对啊

    private RecyclerView.OnScrollListener mRecyclerViewOnScrollListener = new RecyclerView.OnScrollListener()
    

    原因已经找到了并修改了,就是上边的classex.dex名字弄错了【写成了classex1.dex】,系统默认会把java文件打包成classex.dex,我们新加的需要从数字2开始,也就是classex2.dex

    相关文章

      网友评论

          本文标题:eclipse 方法超标处理

          本文链接:https://www.haomeiwen.com/subject/ahkgmqtx.html