成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

通過Gradle為APK瘦身

引言:在過去幾年中,APK 文件的大小曾急劇增長(zhǎng)態(tài)勢(shì)。一般來說,其原因如下:Android開發(fā)者獲取了更多的依賴庫(kù),添加了更多的密度,Apps 增加了更多的功能。但實(shí)際上我們應(yīng)該讓APKs 盡可能的小,更小的APK 意味著用戶可以更快地下載和安裝應(yīng)用,并使它占用更小的內(nèi)存。 
本文選自《Gradle for Android 中文版》,將研究如何設(shè)置Gradle 構(gòu)建配置文件中的幾個(gè)屬性,以縮小APK 文件。

網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了大埔免費(fèi)建站歡迎大家使用!

ProGuard

ProGuard 是一個(gè)Java 工具,其不僅可以縮減APK 文件大小,還可以在編譯期優(yōu)化、混淆和預(yù)校驗(yàn)?zāi)愕拇a。其通過你應(yīng)用的所有代碼路徑,來找到未被使用的代碼,并將其刪除。 
  ProGuard 還會(huì)重命名你的類和字段。這一過程將保留應(yīng)用的蹤跡,讓反編譯工程師更加難以讀懂代碼。 
  在Gradle 的Android 插件中,其構(gòu)建類型下面有一個(gè)叫作minifyEnabled 的布爾類型屬性,你需要將它設(shè)置為true 來激活ProGuard :

android {
  buildTypes {
        release {
             minifyEnabled true
             proguardFiles getDefaultProguardFile
             ('proguard-android.txt'), 'proguard-rules.pro'
             }
        }
   }

當(dāng)minifyEnabled 被設(shè)置為true 后,在構(gòu)建過程中,proguardRelease task 會(huì)被執(zhí)行,并調(diào)用ProGuard。 
  在激活ProGuard 之后,應(yīng)重新測(cè)試整個(gè)應(yīng)用,因?yàn)镻roGuard 可能會(huì)移除一些你仍需要使用的代碼。這也是很多開發(fā)者不喜歡ProGuard 的原因。為了解決這個(gè)問題,你可以定義ProGuard 規(guī)則,排除那些被刪除或混淆的類。我們可以使用proguardFiles 屬性來定義包含ProGuard 規(guī)則的文件。例如,為了保留一個(gè)類,你可以像下面這樣添加一條簡(jiǎn)單的規(guī)則:

-keep public class <MyClass>

getDefaultProguardFile(‘proguard-android.txt’) 方法從Android SDK 的tools/proguard 文件夾下的proguard-android.txt 文件中獲取默認(rèn)的ProGuard 設(shè)置。 
  在Android Studio 中,proguard-rules.pro 文件被默認(rèn)添加到新的Android 模塊,所以你可以在該文件中簡(jiǎn)單地添加一些針對(duì)該模塊的規(guī)則。

提示:你構(gòu)建的每個(gè)應(yīng)用或依賴庫(kù)都有不同的ProGuard 規(guī)則,所以在本書中,我們不會(huì)考慮更多的細(xì)節(jié)。如果你想了解更多關(guān)于ProGuard和ProGuard規(guī)則的信息,則可以通過http://developer.android.com/tools/help/proguard.html. 來查閱AndroidProGuard 的官方文檔。除了縮減Java 代碼外,還可以縮減使用過的資源。

縮減資源

當(dāng)給App 打包時(shí),Gradle 和Gradle 的Android 插件可以在構(gòu)建期間刪除所有未使用的資源。如果你有舊的資源忘記刪除,那么這個(gè)功能可能非常有用。另外一個(gè)使用案例是當(dāng)你導(dǎo)入一個(gè)擁有很多資源的依賴庫(kù),而你只使用了其中的一小部分時(shí),你可以通過激活縮減資源來解決這個(gè)問題。縮減資源的方式有兩種:自動(dòng)和手動(dòng)。

自動(dòng)縮減

最簡(jiǎn)單的方式是在你的構(gòu)建中設(shè)置shrinkResources 屬性。如果設(shè)置該屬性為true,則Android 構(gòu)建工具將自動(dòng)判定哪些資源沒有被使用,并將它們排除在APK 外。使用此功能有一個(gè)要求,即必須同時(shí)啟動(dòng)ProGuard。這是因?yàn)榭s減資源的工作方式是,直到代碼引用這些資源被刪除之前,Android 構(gòu)建工具不能指出哪些資源沒有被用到。 
  下面的代碼片段展示了在某個(gè)構(gòu)建類型中,如何配置自動(dòng)化資源縮減:

android {
       buildTypes {
       release {
             minifyEnabled = true
             shrinkResources = true
             }
       }
}

如果你想看看在激活了自動(dòng)化資源縮減之后,APK 縮減了多少,則可以運(yùn)行shrink-ReleaseResources 任務(wù)。該任務(wù)會(huì)打印出包的大小縮小了多少:

:app:shrinkReleaseResourcesRemoved unused resources: Binary resource data reduced from 433KB
to 354KB: Removed 18%

你可以通過在構(gòu)建命令中添加 –info 標(biāo)志,來獲得APK 縮減資源的概覽:

$ gradlew clean assembleRelease –nfo

當(dāng)你使用該標(biāo)志時(shí),Gradle 會(huì)打印出許多關(guān)于構(gòu)建過程的額外信息,包括最終構(gòu)建不會(huì)輸出的每個(gè)資源。 
  自動(dòng)資源縮減有一個(gè)問題,即它可能移除了過多的資源,特別是那些被動(dòng)態(tài)使用的資源可能被意外刪除。為了防止這種情況的發(fā)生,你可以在res/raw/ 下的一個(gè)叫作keep.xml的文件中定義這些例外。一個(gè)簡(jiǎn)單的keep.xml 文件如下所示:

<?xml version="1.0" encoding="utf-8"?><resources xmlns:tools="http://schemas.android.com/tools"tools:keep="@layout/keep_me,@layout/also_used_*"/>

keep.xml 文件自身也將從最終的結(jié)果中被剝離出來。

手動(dòng)縮減

去除某種語(yǔ)言文件或某個(gè)密度的圖片,是刪減資源的一種比較好的方式。一些依賴庫(kù),例如Google Play Services,其包含了多種語(yǔ)言。如果你的應(yīng)用只支持一兩種語(yǔ)言,那么在最終的APK 中,包含所有語(yǔ)言的文件就會(huì)浪費(fèi)許多資源。這時(shí)你就可以使用resConfigs 屬性來配置你想保留的資源,將其余部分刪除。 
  如果你只想保留英語(yǔ)、丹麥語(yǔ)和荷蘭語(yǔ)的字符串,則可以這樣使用resConfigs :

android {
    defaultConfig {
          resConfigs “en", “da", “nl"
    }
}

你也可以這樣處理密度集合:

android {
    defaultConfig {
          resConfigs “hdpi", “xhdpi", “xxhdpi", “xxxhdpi"
    }
}

你甚至可以結(jié)合語(yǔ)言和密度。實(shí)際上,使用此屬性可以限制每一種類型的資源。 
  如果設(shè)置ProGuard 讓你感覺很困難,或者你僅僅想在應(yīng)用中去除不支持的語(yǔ)言資源或密度,那么你可以使用resConfigs 來縮減資源。 
  本文選自《Gradle for Android 中文版》,點(diǎn)此鏈接可在博文視點(diǎn)官網(wǎng)查看。 
                   通過Gradle為APK瘦身

文章名稱:通過Gradle為APK瘦身
本文來源:http://jinyejixie.com/article42/pggohc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航、小程序開發(fā)響應(yīng)式網(wǎng)站、虛擬主機(jī)網(wǎng)頁(yè)設(shè)計(jì)公司、靜態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁(yè)設(shè)計(jì)
民丰县| 静乐县| 始兴县| 宜州市| 抚远县| 海门市| 通道| 苏州市| 探索| 银川市| 秦皇岛市| 金塔县| 潞西市| 武邑县| 绿春县| 太白县| 榕江县| 英吉沙县| 额尔古纳市| 汕尾市| 民县| 天全县| 柳州市| 潍坊市| 汤阴县| 镇沅| 洛宁县| 大田县| 贵定县| 洮南市| 澎湖县| 北碚区| 新巴尔虎右旗| 沾益县| 海口市| 祁连县| 邵武市| 铜川市| 高平市| 张家港市| 辛集市|