android用eclipse开发碰到65535问题的完美解决方案
2017-03-16 12:01
435 查看
在开发的过程中,由于产品功能越来越多,导致第三方sdk引入过多,运行时出现65535的问题。先给大家普及一下65535是怎么回事:
在Android系统中,一个App的所有代码都在一个Dex文件里面。Dex是一个类似Jar的存储了多有Java编译字节码的归档文件。因为Android系统使用Dalvik虚拟机,所以需要把使用Java Compiler编译之后的class文件转换成Dalvik能够执行的class文件。这里需要强调的是,Dex和Jar一样是一个归档文件,里面仍然是Java代码对应的字节码文件。当Android系统启动一个应用的时候,有一步是对Dex进行优化,这个过程有一个专门的工具来处理,叫DexOpt。DexOpt的执行过程是在第一次加载Dex文件的时候执行的。这个过程会生成一个ODEX文件,即Optimised。DexOpt会把每一个类的方法id检索起来,存在一个链表结构里面。但是这个链表的长度是用一个short类型来保存的,导致了方法id的数目不能够超过65536个。
官方推荐的解决办法是这样的:通过multidex包进行多dex编译的方法。
下面我们详细说一下整个配置过程分为几步
1.配置gradle环境。
2.导出生成build.gradle文件。
3.配置build.gradle。
下面详细介绍上面的每一项
选择Gengrate Gradle build files,根据提示选择项目;
完成后会在工程目录生成如下目录及文件,打开build.gradle文件;
3.配置build.gradle
上面的是配置签名文件的一些配置。用于打包带签名的apk文件。密码****换成自己签名文件的密码。
最好单独拷贝一份出来到一个目录下 ,然后工程上右键 build path->config build path ->add external jars。
查看项目根目录 右键选择 properties, resources 里面的location就是工程根目录,如图:
切到根目录下 然后 输入命令gradle build --info
可能编译时间会有点长,耐心等待 ,倘若编译运行成功,会提示 Build Success ,这是我们可以在工程的目录中发现多了两个文件夹
项目目录多了 build 和gradle两个文件夹 ,编译成功后的apk放在了 build->outputs->apk 目录下 这下面会生成出不同版本的安装包 测试版不带签名、测试版带签名、开发版不带签名、开发版带签名。
我们运行app不能像以前一样方便了,开始我傻傻的拷贝到手机里面运行 效率极其低下....
ps:直接双击可以弹出安装界面,不过这个要安装一些应用市场才可以,我的是手机里面装了应用宝app。
总之用起来肯定不如以前直接运行方便,但是可以解决编译不了问题,尽早换as才是王道。
大家如果有其它问题可以加入我的qq群:454430053
在Android系统中,一个App的所有代码都在一个Dex文件里面。Dex是一个类似Jar的存储了多有Java编译字节码的归档文件。因为Android系统使用Dalvik虚拟机,所以需要把使用Java Compiler编译之后的class文件转换成Dalvik能够执行的class文件。这里需要强调的是,Dex和Jar一样是一个归档文件,里面仍然是Java代码对应的字节码文件。当Android系统启动一个应用的时候,有一步是对Dex进行优化,这个过程有一个专门的工具来处理,叫DexOpt。DexOpt的执行过程是在第一次加载Dex文件的时候执行的。这个过程会生成一个ODEX文件,即Optimised。DexOpt会把每一个类的方法id检索起来,存在一个链表结构里面。但是这个链表的长度是用一个short类型来保存的,导致了方法id的数目不能够超过65536个。
官方推荐的解决办法是这样的:通过multidex包进行多dex编译的方法。
下面我们详细说一下整个配置过程分为几步
1.配置gradle环境。
2.导出生成build.gradle文件。
3.配置build.gradle。
4.将android-support-multidex.jar文件配置到工程下。
5.配置applicaion重写attachBaseContext方法。
6.运行gradle build 编译工程。下面详细介绍上面的每一项
1.配置gradle环境。
官网gradle.org下载最新的gradle包并解压,并在系统环境变量中配置GRADLE_USER_HOME,为解压路径;2.导出生成build.gradle文件
右键工程->Export;选择Gengrate Gradle build files,根据提示选择项目;
完成后会在工程目录生成如下目录及文件,打开build.gradle文件;
3.配置build.gradle
signingConfigs { myConfig { storeFile file("E:\\appSignPkg") storePassword "****" keyAlias "app" keyPassword "****" } } buildTypes { release { //minifyEnabled false表示工程打包时,不进行混淆 minifyEnabled false //混淆配置文件 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt' // 签名配置 signingConfig signingConfigs.myConfig } } afterEvaluate { tasks.matching { it.name.startsWith('dex') }.each { dx -> if (dx.additionalParameters == null) { dx.additionalParameters = ['--multi-dex'] }else { dx.additionalParameters += '--multi-dex' } } }
上面的是配置签名文件的一些配置。用于打包带签名的apk文件。密码****换成自己签名文件的密码。
4.将android-support-multidex.jar 文件配置到工程下
在sdk的这个路径(adt-bundle-windows-x86_64-20140702\sdk\extras\android\support\multidex\library\libs)下找到android-support-multidex.jar这个文件最好单独拷贝一份出来到一个目录下 ,然后工程上右键 build path->config build path ->add external jars。
5.配置applicaion重写attachBaseContext方法
在applicaioin类中增加如下代码@Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this); }
6.运行gradle build 编译工程
我们做完上面的这些工作以后我们打开命令行工具,切换到我们的工程根目录下 cd /d 工程路径,然后输入 gradle build --info,这时就观察控制台的打印日志就行了,如果编译成功会有提示 build success查看项目根目录 右键选择 properties, resources 里面的location就是工程根目录,如图:
切到根目录下 然后 输入命令gradle build --info
可能编译时间会有点长,耐心等待 ,倘若编译运行成功,会提示 Build Success ,这是我们可以在工程的目录中发现多了两个文件夹
项目目录多了 build 和gradle两个文件夹 ,编译成功后的apk放在了 build->outputs->apk 目录下 这下面会生成出不同版本的安装包 测试版不带签名、测试版带签名、开发版不带签名、开发版带签名。
我们运行app不能像以前一样方便了,开始我傻傻的拷贝到手机里面运行 效率极其低下....
ps:直接双击可以弹出安装界面,不过这个要安装一些应用市场才可以,我的是手机里面装了应用宝app。
总之用起来肯定不如以前直接运行方便,但是可以解决编译不了问题,尽早换as才是王道。
大家如果有其它问题可以加入我的qq群:454430053
相关文章推荐
- Android使用Eclipse工具开发解决65535问题
- Android开发环境搭建--完美解决eclipse安装Genymotion插件找不到图标问题
- android eclipse开发碰到的问题
- android 主程序开发时碰到的各种问题及解决方案
- ubuntu下Android开发环境的搭建:eclipse+SDK详细安装教程+常见问题及其解决方案
- Android之eclipse adt开发ndk没有NDK选项问题的解决方案
- 解决Eclipse进行Android开发时logcat不显示问题-使用DDMS
- 【android开发】ubuntu下使用Eclipse开发android的几个问题
- 解决 eclipse开发的android工程在linux上编译不过的@Override问题
- 彻底解决在win7 eclipse+android 开发,eclipse提示假死问题。
- Tomcat于Eclipse集成开发问题以及解决方案
- [原]用Eclipse开发Android应用,用svn管理源码时遇到的问题及解决方法
- Android开发入门常见问题:模拟器启动及Eclipse报错
- eclipse开发blackberry问题集合及解决方案
- 【Ubuntu手记】64位Ubuntu11.10下 eclipse配置Android开发环境所遇到的问题
- eclipse 开发android 项目的时候系统自动生成的R.Java文件在重新生成时候丢失问题
- Eclipse 开发Android小程序遇到的问题总结
- eclipse开发中碰到的问题
- [开发]Android开发中碰到的问题
- 解决eclipse在开发Android过程中崩溃的问题