Android项目开发遇到的问题(64K的错误)的解决之路,从入坑到出坑
自己一个android项目,一直以来进展还算顺利,没有遇到什么严重性的问题,今天准备给同事手机上安装一下玩玩,谁知丢人丢大,无法build apk!报错!my god,我开发没问题啊,我手机连上usb,然后android studio里面运行,很顺利,能够正确安装。
但是换同事的手机却不行,编译报错,不行,再试下我的手机,依然正常,换同事手机就不行!!
我的第一反应是手机版本问题!果然,我手机6.0,同时手机依然是:4.4.4,好吧,去看看我的项目配置:
好吧,貌似是支持4.4.4的啊,为毛呢?
看错误信息吧(我的跳坑之路就此开始):
第二个错误看不懂,不过第一个秒懂,传说中的64K,,方法数超出:
有个网址,但是需要翻墙,肯英文吧,不会翻墙的童鞋百度很多官方解决方案的翻译,大概步骤如下:
1.添加一个multidex包引用,但是,在android studio module的Dependenices标签里添加却找不到,空的
直接添加吧,在build.gradle文件中修改:如下,
添加:compile 'com.android.support:multidex:1.0.0'修改defaultconfig配置:添加:
multiDexEnabled = true
android {
compileSdkVersion 21
buildToolsVersion "21.1.0"
defaultConfig {
...
minSdkVersion 14
targetSdkVersion 21
...
// Enabling multidex support.
multiDexEnabled true
}
...
}
dependencies {
compile 'com.android.support:multidex:1.0.0'
}
3.修改manifest声明修改
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.android.multidex.myapplication">
<application
...
android:name="android.support.multidex.MultiDexApplication">
...
</application>
</manifest>
下一步之前记得Clear一下项目,会加载'com.android.support:multidex:1.0.0'包
如果有自己的Application,继承MulitDexApplication。如果当前代码已经继承自其它Application没办法修改那也行,就重写 Application的attachBaseContext()这个方法。由于我有自己的Application用于捕获异常,所以我就改继承
原来:
修改后:
参考地址:http://blog.zongwu233.com/the-touble-of-multidex
到此完成,编译项目,经过漫长的等待,编译,报错!!!
好吧,这次错误变成了大概就是内存溢出之类的吧,
谷歌出了一个网站:http://www.tuicool.com/articles/bEFNJj
得到了处理方法,在build.gradle中添加,具体解释看上面的网站:
OK ,终于完成了:
成功编译出apk:
到此,64K不再报错,看成果 rar加压后有两个dex文件,就是把方法分开了吧
64K解决之路到此结束!
注意:项目就几个功能:怎么会造成方法数超出64K呢,还有分析apk文件怎么会有7M之大?
深入分析问题根源:
我的项目就一个登录页面+一个注册页面 +2个功能页面,一共也才不到10个功能,怎么方法数会超呢,感觉这个才是问题的根源,不解决这个问题,是治标不治本!!
于是,谷歌再谷歌,终于被我找到一个文章,
http://blog.csdn.net/qq376430645/article/details/49885399
开始了我的APK分析之路:
按照文章指引:分析了我的apk方法数组成,其中一个引起了我的注意:
google的?方法数占到将近5W个,难怪,又分析了下别人的apk,是没有这个的,所以基本锁定就是这个问题,然后查看项目是否引用了google的一些东西?一查,还真有一个:
就是这个啦,我好像没有用过这个啊,什么时候加上的,不知道,管他呢,删了再说
删除,编译:
报错,分析下吧:
项目中这个家伙:
知道了,这些是我研究Fragment时添加的
好吧,完全没用,干掉
再编译,正常,吧刚才解决64K问题时候修改以及添加的代码都复原,
编译,正常:
apk大小 3M多一点,减少了一半!!!
完结!!!!!
关于64K问题的解决方法,采用了最简单的,其中参考网址中提到哪些QQ,微信,FB的解决办法,由于技术有限,还没勇气去实现!!
参考:
https://developer.android.com/studio/build/multidex.html
http://blog.zongwu233.com/the-touble-of-multidex
http://www.tuicool.com/articles/bEFNJj
Android项目开发遇到的问题(64K的错误)的解决之路,从入坑到出坑的更多相关文章
- Eclipse打开Android项目报Parsing Data for android-21 failed错误的解决办法(转载)
转载:http://segmentfault.com/blog/hongliang/1190000000739285 今天手贱,用android命令打开SDK Manager下载了最新的Android ...
- Android项目开发全程(四)-- 将网络返回的json字符串轻松转换成listview列表
前面几篇博文介绍了从项目搭建到获取网络字符串,对一个项目的前期整体工作进行了详细的介绍,本篇接着上篇介绍一下怎么样优雅将网络返回的json字符串轻松转换成listview列表. 先上图,看一下效果. ...
- Android项目开发全程(三)-- 项目的前期搭建、网络请求封装是怎样实现的
在前两篇博文中已经做了铺垫,下面咱们就可以用前面介绍过的内容开始做一个小项目了(项目中会用到Afinal框架,不会用Afinal的童鞋可以先看一下上一篇博文),正所谓麻雀虽小,五脏俱全,这在里我会尽量 ...
- Android项目开发全程(二)--Afinal用法简单介绍
本篇博文接上篇的<Android项目开发全程(一)--创建工程>,主要介绍一下在本项目中用到的一个很重要的框架-Afinal,由于本系列博文重点是项目开发全程,所以在这里就先介绍一下本项目 ...
- Android项目开发填坑记-Fragment的onBackPressed
Github版 CSDN版 知识背景 Fragment在当前的Android开发中,有两种引用方式,一个是 Android 3.0 时加入的,一个是supportV4包中的.这里简称为Fragment ...
- Android项目开发填坑记-Fragment的onAttach
背景 现在Android开发多使用一个Activity管理多个Fragment进行开发,不免需要两者相互传递数据,一般是给Fragment添加回调接口,让Activity继承并实现. 回调接口一般都写 ...
- Android项目开发填坑记-so文件引发的攻坚战
故事的最初 我负责的项目A要求有播放在线视频的功能,当时从别人的聊天记录的一瞥中发现百度有相关的SDK,当时找到的是Baidu-T5Player-SDK-Android-1.4s,项目中Demo的so ...
- C#-Xamarin的Android项目开发(二)——控件应用
相信我,这不是一篇吐槽文章.... 基础控件 Android的控件和控件样式非常特别,它是一种内联特别高的设计模式,换句话说,它是非常烂的设计.... 但在这种特别的关系里还是有一定的规律的,下面我们 ...
- C#-Xamarin的Android项目开发(三)——发布、部署、打包
前言 部署,通常的情况下,它其实也是项目开发的一个难点. 为什么这么说呢?因为,它不是代码开发,所以很多开发者本能的拒绝学习它. 并且一个项目配置好一次以后,部署的步骤和部署的人通常很固定,所以大部分 ...
随机推荐
- redis’五种格式的存储与展示
Redis支持持久化只是它的一件武器,另外,它针对不同的需求也提供了多达5种数据存储方式,以最大效率上的实现你的需求,下面分别说一下: 一 string(字符串) string是最简单的类型,你可以 ...
- Color Space: HSV
HSV(hue,saturation,value)颜色空间的模型对应于圆柱坐标系中的一个圆锥形子集,圆锥的顶面对应于V=1. 它包含RGB模型中的R=1,G=1,B=1 三个面,所代表的颜色较亮.色彩 ...
- OAuth2.0 微博登陆网站功能的实现(一)获取用户授权及令牌 Access Token
在登陆一些网站的时候,可以选择登陆方式为第三方登陆,例如微博登陆,以爱奇艺为例,进入首页,点击 ”登陆“,会弹出登录框: 除了本站登陆外,还可以选择其他第三方登陆,比如微博登陆.QQ 登陆.微信登陆等 ...
- java IO 学习总结
推荐文章:java I/O学习 只要是处理纯文本数据,就要优先考虑使用字符流,除此之外都用字节流 字符流:FileReader和BufferedReader的使用 String path = &quo ...
- UIView画虚线边框
//fatherView加虚线边框 -(void)boundingRectangleForView:(UIView *)fatherView{ CAShapeLayer *borderLayer = ...
- WIN2008 R2 安装SQLSERVER2008笔记
系统升级到SERVER2008R2 有些地方和WIN2003区别很大 这里记下 1.IIS 2008已经自带了不需要再额外找安装包或者系统盘安装 只需要打开服务管理器“角色”中添加”“web服务器(I ...
- ftp列表错误或长城宽带连不上ftp的解决方法
有些是长城宽带,我 帮忙测试,在客户PC机上测试,PING 任何网站 不通:tracert 超时:FTP 超时,不出现用户名提示.但访问网站正常,检测后进入到路由器,禁用DHCP服务 ,问题解决. 或 ...
- Unit02-OOP-对象和类,数组(下)
Unit02-OOP-对象和类,数组(下) 1.方法的签名: 方法名+参数列表 2.方法的重载(Overload): 1)发生在一个类中,方法名称相同,参数列表不同 2)编译器在编译时自动根据签名 ...
- swprintf %s %ws %S 的区别
http://www.codeproject.com/Articles/20869/D-Fast-Wavelet-Transform-Library-for-Image-Proces该作者提供的源代码 ...
- Python 面向对象编程进阶
静态方法 只是名义上归类管理,实际上在静态方法里访问不了类或实例中的任何属性 通过@staticmethod装饰器即可把其装饰的方法变为一个静态方法,什么是静态方法呢?其实不难理解,普通的方法,可以在 ...