自动删除Android工程中无用的资源
开发时间久了, 几个版本迭代之后, 工程中难免留下很多垃圾资源, 造成apk的包很大, 这里介绍一个工具, 可以自动扫描工程中, 没有使用的资源, 然后自动删除: 包括图片, xml, 文本等.
采用的方案: https://github.com/KeepSafe/android-resource-remover
这个开源的项目是基于lint扫描的结果, 执行python脚本自动删除无用的文件.
有一段时间没更新了, 而且是基于之前eclipse的路径结构, 不过即使是gradle工程, 仍然是可用的. 下面就是具体的方法, 本文是在mac os x上, 其他的操作系统大同小异.
1. 安装
首先是安装:
pip install android-resource-remover
2. 执行
a. eclipse工程
直接在项目根目录下执行
android-resource-remover
b. Android Studio工程
注意, 按照github中的命令:
./gradlew clean build :lint && android-resource-remover --xml build/outputs/lint-results.xml
是不能工作的, 因为项目很久没更新, 对gradle的目录结构等支持不好, 经过本人摸索, 找到了可用的方法.
3. 编译
首先clean工程:
在项目根目录下执行
./gradlew clean
然后编译:
./gradlew build
注意, 因为是命令行编译, 有时会遇到系统jdk版本和Android Studio内置的jdk版本不一样, 编译失败的问题, 请正确的切换jdk版本.
如果不会切换, 最简单的方法就是将JAVA_HOME设置为Android Studio内置的jdk路径, mac上是
export JAVA_HOME="/Applications/Android Studio.app/Contents/jre/jdk/Contents/Home"
Android Studio内置的jdk路径可以在Android Studio的项目设置的SDK Location中找到, 如下图所示

设置jdk路径就可以正常编译了, 只要在AndroidStudio里能编过, 命令行也能编过. build过程最后会执行lint扫描, 这正是我们想要的结果.
4. 基于lint结果, 删除图片
编译之后lint扫描的结果在app/build/outputs/lint-results-debug.xml, 这是debug版的, 也有release版的.
这里就有路径问题了, 所以要按照下面的步骤操作:
a. cd 到AndroidManifest.xml同一路径下, 即main文件夹
cd app/src/main
b. 执行脚本
android-resource-remover --xml ../../../app/build/outputs/lint-results-debug.xml
注意这里使用了相对路径../三次,返回到根目录, 也可以使用绝对路径来指定lint结果文件.
脚本就会自动删除没有引用的资源了, 会输出删除的结果, 如下图所示.

5. 修正
删除后编译一下, 会有一些误删, 但是本人测试发现, 误判数量很少, 基本上是个位数的, 误判的文件回复即可, 就可以编译通过.
然后可以多执行几次, 有些文件一次扫不全, 要多扫几次, 执行4-5次即可, 每次都从clean开始, 然后build, 再执行脚本.
对于大型的工程这个方法非常节省时间, 可以在每次发版之前扫描一下, 给apk瘦身.
转载注明出处: http://www.cnblogs.com/dqshll/p/6496325.html
自动删除Android工程中无用的资源的更多相关文章
- 利用python自动清除Android工程中的多余资源
我们直接在公司项目中使用,效果良好! 分享出脚本代码,希望对Android研发的同学有帮助. 提示,初学python,开发环境是Sublime Text 2,直接Ctrl+B的,其他环境下没调试过.应 ...
- [转载]android工程中引入另一个工程中的资源
原文地址:android工程中引入另一个工程中的资源作者:87fayuan 在项目中可能遇到这样的问题:项目过大,于是细分为N个子模块来做,每个模块都是不同的工程.涉及到activity传数据时,可以 ...
- 在android工程中添加图片资源(转加)
在Android工程中,每添加一个资源,就会在gen目录下的R.java中自动生成一个新的静态整型变量来指向这个资源.程序文件中调用资源的时候,先在R.java中找到变量名,然后根据变量值查找资源. ...
- 【Unity与Android】02-在Unity导出的Android工程中接入Google Admob广告
我在上一篇文章 [Unity与Android]01-Unity与Android交互通信的简易实现) 中介绍了Unity与Android通讯的基本方法. 这一篇开始进入应用阶段,这次要介绍的是如何在An ...
- 使用脚本删除ios工程中未使用图片
使用脚本删除ios工程中未使用图片 最近在读唐巧大神的<iOS开发进阶>,学到了一个大招:使用脚本删除ios中未使用的图片(纸书上有点小问题,参考github上的issue:使用脚本删除i ...
- 清除Android工程中没用到的资源
项目需求一改再改,UI一调再调,结果就是项目中一堆已经用不到但却没有清理的垃圾资源,不说工程大小问题,对新进入项目的人或看其他模块的代码的人来说,这些没清理的资源可能也可能会带来困扰,所以最好还是清理 ...
- 清除Android工程中没用到的资源(转)
项目需求一改再改,UI一调再调,结果就是项目中一堆已经用不到但却没有清理的垃圾资源,不说工程大小问题,对新进入项目的人或看其他模块的代码的人来说,这些没清理的资源可能也可能会带来困扰,所以最好还是清理 ...
- 使用android-resource-remover删除项目中无用的资源,减少包的大小
写这篇文章的原因是,一个CSDN的资源链接,Android程序员必备精品资源,在该链接的实用工具集锦中有一个工具吸引了我的注意,那就是android-resource-remover,它的解释是:一个 ...
- Android 工程中各种文件的介绍
一:Android.mk Android.mk 内部定义了一个或者多个源代码的模块,该文件的产生是和NDK相关的,NDK 是Android提供的一种工具,可以为编译mk文件内部的源代码提供依赖 ...
随机推荐
- 八大排序算法——基数排序(动图演示 思路分析 实例代码java 复杂度分析)
一.动图演 二.思路分析 基数排序第i趟将待排数组里的每个数的i位数放到tempj(j=1-10)队列中,然后再从这十个队列中取出数据,重新放到原数组里,直到i大于待排数的最大位数. 1.数组里的数最 ...
- Java读取txt文件和写入txt文件
package com.nickwong.code; import java.io.*; /** * Created by Nickwong on 31/07/2018. * 根据1-8楼的建议,优化 ...
- 阅读github上的项目源码
1.基础资料 函数手册,类库函数手册2.和程序相关的专业资料 高数,linux文件系统3.相关项目的文档资料4.留备份,构造可运行的环境,找开始的地方 main(),5.分层次阅读,写注解,编程思想, ...
- s6k0:一种输入法分词关联模型演示
实现:用kotlin.但是考虑到习惯问题,需要借助akka实现erlang的actor,以及rx.java 需求:略 预计:最快两周 保守估计时间:2019年3月左右 优先级:低 加速方法:打饭钱 赞 ...
- SharePoint CU、Hotfix和SP版本的区别
1.Hotfix:通常是对一个特殊问题的修复包 2.CU(Cumulative Update):Hotfix的集合,包含从上一个SP(Service Pack)版本以来所有的Hotfix 3.SP(S ...
- Oracle Database 11g安装及报错处理(win7)
稍后会将安装过程上传.Oracle数据库安装先决条件检查失败解决方案: 1,检查失败信息中,预期值:N/A 实际值:N/A ,并未出现具体的值 查看 “详细信息” . 引起失败的原因是:无法在指 ...
- UVa LA 3266 - Tian Ji -- The Horse Racing 贪心,不只处理一端,也处理另一端以理清局面 难度: 2
题目 https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_pr ...
- Linux Mysql创建用户并分配权限
1.查看全部的用户: select user,host from mysql.user\G; 2.新建用户: create user ‘用户名’@‘主机名’ identified by ‘用户密码 ...
- Mysql数据字典导出
1.phpmyadmin中自带的数据字典导出 2.利用下面的脚本: <?php /** * 生成mysql数据字典 */ header("Content-type: text/html ...
- CentOS-7-1804下MySQL安装及防火墙设置
第一步,下载MySQL Linux 版本安装包,这里使用 这个版本. 第二步,上传安装包到Linux系统中. 第三步,解压安装包 tar -zxvf mysql--linux-glibc2.-x86_ ...