自动删除Android工程中无用的资源

开发时间久了, 几个版本迭代以后, 工程中不免留下不少垃圾资源, 形成apk的包很大, 这里介绍一个工具, 能够自动扫描工程中, 没有使用的资源, 而后自动删除: 包括图片, xml, 文本等. html

采用的方案: https://github.com/KeepSafe/android-resource-removerpython

这个开源的项目是基于lint扫描的结果, 执行python脚本自动删除无用的文件.android

有一段时间没更新了, 并且是基于以前eclipse的路径结构, 不过即便是gradle工程, 仍然是可用的. 下面就是具体的方法, 本文是在mac os x上, 其余的操做系统大同小异.git

1. 安装github

    首先是安装: app

pip install android-resource-remover

2. 执行eclipse

     a. eclipse工程工具

   直接在项目根目录下执行 测试

android-resource-remover

     b. Android Studio工程gradle

   注意, 按照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 

相关文章
相关标签/搜索