开发者社区> 再见孙悟空_> 正文

android用eclipse开发碰到65535问题的完美解决方案

简介: android用eclipse开发碰到65535问题的完美解决方案
+关注继续查看

在开发的过程中,由于产品功能越来越多,导致第三方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。


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,根据提示选择项目;


image.png

完成后会在工程目录生成如下目录及文件,打开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就是工程根目录,如图:


image.png

切到根目录下 然后 输入命令gradle build --info

image.png

image.png

可能编译时间会有点长,耐心等待 ,倘若编译运行成功,会提示 Build  Success ,这是我们可以在工程的目录中发现多了两个文件夹

image.png

项目目录多了 build 和gradle两个文件夹  ,编译成功后的apk放在了  build->outputs->apk 目录下  这下面会生成出不同版本的安装包  测试版不带签名、测试版带签名、开发版不带签名、开发版带签名。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
android 加载dwg 图纸解决方案
android 加载dwg 图纸解决方案
23 0
android用eclipse开发碰到65535问题的完美解决方案
android用eclipse开发碰到65535问题的完美解决方案
14 0
android 记一次解决键盘遮挡问题
文章链接:https://mp.weixin.qq.com/s/1gkMtLu0BTXOUOj6isDjUw 日常android开发过程中,会遇到编辑框输入内容弹出软键盘,往往会出现键盘遮挡内容,或者出现页面整体上移的,或多或少在体验上都不是很优雅,今天提供个方法是自行控制页面上移距离,竟可能让页面呈现给用户友好点。
2211 0
JNA 实际开发中若干问题解决方法
JNA 实际开发中若干问题解决方法
8703 0
Android 如何有效的解决内存泄漏的问题
前言:最近在研究Handler的知识,其中涉及到一个问题,如何避免Handler带来的内存溢出问题。在网上找了很多资料,有很多都是互相抄的,没有实际的作用。 本文的内存泄漏检测工具是:LeakCanary  github地址:https://github.com/square/leakcanary     什么是内存泄漏? 内存泄漏是当程序不再使用到的内存时,释放内存失败而产生了无用的内存消耗。
803 0
Android viewpager 嵌套 viewpager滑动 点击事件冲突解决方案
为了解决这个问题。可以自定义viewpager,然后在里面监听首饰,自定义点击事件   package com.hpuvoice.view; import android.content.
895 0
Eclipse --Type /com.xx.app/gen already exists but is not a source folde解决方案
两种解决方案: Two actions, first: 1.Right click on the project and go to "Properties" 2.Select "Java Build Path" on the left 3.
609 0
Android之路 - 冷启动解决方案:实现秒开
前言 关于 splash 页面相信每个Android开发者都是非常熟悉的,而且很多人也遇到过需要在splash加个广告图片,然后延迟3秒在进入主页面,splash 应该只是一个启动页面,不应该放广告,但是那又能怎么样呢?又敌不过产品经理。
2146 0
246
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载