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

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

image.png

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

image.png

image.png

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

image.png

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

相关文章
|
11天前
|
设计模式 算法 前端开发
Android面经分享,失业两个月,五一节前拿到Offer,设计思想与代码质量优化+程序性能优化+开发效率优化
Android面经分享,失业两个月,五一节前拿到Offer,设计思想与代码质量优化+程序性能优化+开发效率优化
|
9天前
|
编解码 数据库 Android开发
安卓应用开发:打造高效用户界面的五大技巧
【5月更文挑战第18天】在竞争激烈的应用市场中,一个流畅且直观的用户界面(UI)对于安卓应用的成功至关重要。本文将探讨五种提升安卓应用用户界面性能的技巧,包括合理布局设计、优化资源使用、利用硬件加速、内存管理以及响应式编程。通过这些方法,开发者可以创建出既美观又高效的应用体验,从而吸引和保留用户。
|
11天前
|
XML Android开发 数据格式
ConstraintLayout 2,Android高级开发面试
ConstraintLayout 2,Android高级开发面试
|
1天前
|
缓存 安全 物联网
构建未来:基于Android的智能家居控制系统开发
【5月更文挑战第27天】 随着物联网技术的蓬勃发展,智能家居系统作为其重要分支,正逐步渗透到人们的日常生活中。本文旨在探讨并实现一个基于Android平台的智能家居控制系统,通过分析系统需求、设计架构以及具体实现过程,展现如何利用现代移动开发技术与物联网设备进行有效集成,以提升居住环境的智能化水平。文中不仅详细阐述了系统的设计理念和功能模块,还对关键技术如设备通信协议、用户界面设计和后台服务管理进行了深入讨论。
|
2天前
|
数据处理 API Android开发
安卓应用开发:构建一个高效的通知管理系统
【5月更文挑战第25天】在移动操作系统中,通知管理是用户体验的核心组成部分。特别是对于安卓设备,由于其开放性和多样性,有效的通知管理系统显得尤为重要。本文将详细介绍如何在安卓平台上构建一个高效、用户友好的通知管理系统。我们将从通知渠道的管理、用户自定义设置以及后台数据处理等方面展开讨论,并提供实用的代码示例和最佳实践建议。
|
4天前
|
缓存 监控 Java
安卓应用开发中的内存优化策略
【5月更文挑战第24天】 在移动设备上,资源的有限性要求开发者对应用程序进行细致入微的性能优化。特别是对于安卓平台,由于设备的多样性和碎片化问题,内存管理成为提升应用性能、用户体验和电池寿命的关键因素。本文将探讨针对安卓开发的内存优化技巧,从避免内存溢出、减少内存占用到提高内存回收效率等方面展开讨论,旨在为开发者提供实用的内存优化策略,以改善应用的运行效率和稳定性。
|
8天前
|
搜索推荐 API Android开发
安卓应用开发:打造高效通知管理系统
【5月更文挑战第20天】在移动设备中,通知管理是用户体验的关键部分。一个高效的通知系统不仅能够及时传达重要信息,还能避免用户感到不必要的干扰。本文将深入探讨如何在安卓平台上开发一个高效的通知管理系统,包括通知的设计、发送策略以及用户的个性化设置。通过分析安卓系统的通知机制和最新的API特性,我们将提供一个实用的开发指南,帮助开发者创建更加智能和用户友好的通知体验。
|
11天前
|
JSON Android开发 数据格式
Android框架-Google官方Gson解析,android开发实验报告总结
Android框架-Google官方Gson解析,android开发实验报告总结
|
11天前
|
前端开发 Android开发
Android架构组件JetPack之DataBinding玩转MVVM开发实战(四)
Android架构组件JetPack之DataBinding玩转MVVM开发实战(四)
Android架构组件JetPack之DataBinding玩转MVVM开发实战(四)
|
11天前
|
安全 Linux Android开发
Android最强保活黑科技的最强技术实现,2024年最新阿里资深Android开发带你搞懂Framework
Android最强保活黑科技的最强技术实现,2024年最新阿里资深Android开发带你搞懂Framework
Android最强保活黑科技的最强技术实现,2024年最新阿里资深Android开发带你搞懂Framework