eclipse 方法超标处理

来源:
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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一、简述 热修复无疑是这2年较火的新技术,是作为安卓工程师必学的技能之一。在热修复出现之前,一个已经上线的app中...
    GitLqr阅读 23,197评论 32 153
  • 这一章主要针对项目中可以用到的一些实用功能来介绍Android Gradle,比如如何隐藏我们的证书文件,降低风险...
    acc8226阅读 7,979评论 3 25
  • Tinker 热补丁接入过程中的坑!!! =============== Tinker 介绍 官方接入说明 gra...
    朱立志阅读 2,256评论 0 2
  • [TOC] 64k方法数限制解决方案 Eclipse下Android 64k方法数的解决方案 eclipse An...
    linshaoyu阅读 2,674评论 0 0
  • 很长的一段时间,我一直希望自己能变成画画高手,把所有的画面都画下来珍藏。 跟W还算有缘。高中三年分了两次班,每年都...
    胡淼淼_阅读 392评论 0 0

友情链接更多精彩内容