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);
  }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM