Android Studio利用Gradle删除没有使用到的资源和代码文件
一、打包时忽略无用资源
我们在打包的时候默认会把没有用到的资源(比如图片)也打包成app,徒增了应用的大小。现在我们可以利用Gradle来优雅的去除没有用到的资源文件了!
就是在gradle中配置shrinkResources true。这个东西依赖于minifyEnabled,所以minifyEnabled也要为true才行。
官方推荐在正式版中这么写:
android {
buildTypes {
release {
minifyEnabled true
shrinkResources true
}
}
}
如果你觉得debug包也太大,可以按照下面的方式写:
buildTypes {
debug {
minifyEnabled true
shrinkResources true
}
release {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
我通过测试确实可以大大减少应用的大小,但也发现了一个问题,很多没有用到的类还是会被打包进去。比如你用了lib,lib里有很多很多类,你可能就用到了一个类,但却把lib中的所有类都打包了进去,很不合理。而且因为去除无效代码的功能要依赖于混淆,混淆又是一个耗时的操作,还是没有彻底解决打包慢的问题。
二、打包时忽略无用的代码
我目前的需求是很多工具类都在一个lib中,但我平常只用到lib中的几个类,所以希望生成apk的时候自动拍出lib中没有用到的类。于是我想到了下面的办法:
1.我首先在debug模式下配置一下,在debug时也进行混淆,并且自定义了混淆的配置文件debug-proguard-rules.pro
buildTypes {
debug {
minifyEnabled true // 是否混淆
shrinkResources true // 是否去除无效的资源文件
proguardFiles getDefaultProguardFile('proguard-android.txt'),'debug-proguard-rules.pro'
}
release {
minifyEnabled true // 是否混淆
shrinkResources true // 是否去除无效的资源文件
// 混淆的配置文件
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
这样在debug的时候也会进行混淆,但我仅仅需要混淆lib包中的代码,而不混淆我app项目下的代码。这样就可以删除掉lib中无用的代码了。测试下来可以保证只有用到的东西才会被打包进来,其余的东西都没有被打包,效果不错!
此外,你混淆的时候也会对你的代码进行优化,比如我写了下面一个判断intent的方法:
public static boolean isBundleEmpty(Intent intent) {
if (intent != null) {
if (intent.getExtras() == null){
return true;
}
}
return false;
}
混淆后发现它进行了自动优化:
public static boolean a(Intent paramIntent)
{
return (paramIntent == null) && (paramIntent.getExtras() == null);
}
Android Studio利用Gradle删除没有使用到的资源和代码文件的更多相关文章
- Android 项目利用 Android Studio 和 Gradle 打包多版本APK
在项目开发过程中,经常会有需要打包不同版本的 APK 的需求. 比如 debug版,release版,dev版等等. 有时候不同的版本中使用到的不同的服务端api域名也不相同. 比如 debug_ap ...
- 利用 Android Studio 和 Gradle 打包多版本APK
在项目开发过程中,经常会有需要打包不同版本的 APK 的需求. 比如 debug版,release版,dev版等等. 有时候不同的版本中使用到的不同的服务端api域名也不相同. 比如 debug_ap ...
- android studio 使用gradle 导出jar包,并打包assets目录
警告:本文年久失修. 随着android studio的升级 ,gradle的升级,严格按照本文的代码去做可能不会成功,希望依然可以作为解决问题的思路. 最近项目在做一个sdk,供别的开发者使用,所以 ...
- Android Studio :Android Studio 与 Gradle 深入【二】
转载:http://www.apkbus.com/forum.php?mod=viewthread&tid=255063&extra=page%3D2%26filter%3Dautho ...
- [转]--android studio 使用gradle 导出jar包,并打包assets目录
转自: http://www.cnblogs.com/wuya/p/android-studio-gradle-export-jar-assets.html 最近项目在做一个sdk,供别的开发者使 ...
- 快速掌握 Android Studio 中 Gradle 的使用方法
快速掌握 Android Studio 中 Gradle 的使用方法 Gradle是可以用于Android开发的新一代的 Build System, 也是 Android Studio默认的build ...
- 在Android studio中用gradle打 jar 包(Mac下)
这两天公司要重构项目,以前的项目在eclipse上,准备迁移到Android studio上,需要对项目打包,于是我学习了Android studio中gradle打包的内容.我在公司用的Mac,在家 ...
- Android Studio 配置Gradle总结
一, 问题:①换个新电脑安装完Android Sutdio第一次打开一个工程巨慢怎么办? ② 手动配置Gradle Home为什么总是无效? ③ 明明已经下载了Gradle,配置了gradle hom ...
- JNI 在Android Studio利用NDK编译运行一个简单的c库
NDK开发,其实是为了项目需要调用底层的一些C/C++的一些东西:另外就是为了效率更加高些.如果你在Eclipse+ADT下开发过NDK就能体会到要么是配置NDK还要下载Cygwin,配置Cygwin ...
随机推荐
- Netty5 + WebSocket 练习
1. 了解WebSocket知识 略2. websocket实现系统简单反馈时间 WebSocketServerHandler.java package com.jieli.nettytest.web ...
- 正确理解静态Static关键字
与其他语言不通,C#没有全局变量和全局函数的感念,C#的所有字段和方法都出现在一个类的上下文中,在C#中与全局字段或函数等价的就是静态字段或方法.“全局字段或方法”与“C#的静态字段或方法”没有功能上 ...
- jqmobile小技巧
jqmobile API好像是不全,很多查不到.记录下自己的发现: 1.popup:data-position-to能够指向class或者id:data-position-to="#id|| ...
- EPANET能做什么,不能做什么
What Epanet cand and cannot do Good news!Epanet can do most of the calculations you may need for you ...
- Android学习笔记之Json的使用....
PS:当你的能力还驾驭不了你的目标时,那你需要沉下心来历练... 学习内容: 1.Json的使用... 2.Json信息过滤... 3.从网络上获取Json数据... 4.解析Json数据获取各个属性 ...
- JavaScript中的数组详解
JavaScript中的数组 一.数组的定义 数组是值的有序集合,或者说数组都是数据的有序列表. 二.创建数组 [字面量形式] 1.空数组 var arr=[]; 2.带有元素的数组 var arr= ...
- 四、Handler(WSGIHandler)
1.1 类视图关系 Handler主要负责处理HTTP请求,并生成相应的相应,process_request,process_response是两个最主要的成员.下图是WSGIHandle ...
- R语言简单聚类分析
#以R基础包自带的鸢尾花(Iris)数据进行聚类分析iris data <- iris[,:] #系统聚类法(层次聚类法) distance <- dist(data) #计算距离 iri ...
- thread_fork/join并发框架1
一.线程并发控制 Thread.Executor.ForkJoin和Actor 1.裸线程 Runnable接口,调用.start()开始,没有现成的API来结束线程,你需要自己来实现, ...
- 三分套三分 --- HDU 3400 Line belt
Line belt Problem's Link: http://acm.hdu.edu.cn/showproblem.php?pid=3400 Mean: 给出两条平行的线段AB, CD,然后一 ...