• 自动删除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 

  • 相关阅读:
    [转]关于ORA00979 不是 GROUP BY 表达式错误的解释
    【转】mongodb简介及源码编译安装mongo2.0.0服务器
    mysql 缓存(转)
    iostat命令详解(转)
    C++虚函数,纯虚函数,抽象基类,虚基类(转)
    C++虚类的作用(转)
    C++ 纯虚类(转)
    虚函数的应用特性(转)
    2、Linux多线程,线程的分离与结合(转)
    mongodb js shell不能使用退格键的问题(转)
  • 原文地址:https://www.cnblogs.com/dqshll/p/6496325.html
Copyright © 2020-2023  润新知