【移動應(yīng)用開發(fā)技術(shù)】通過Gradle為APK瘦身_第1頁
【移動應(yīng)用開發(fā)技術(shù)】通過Gradle為APK瘦身_第2頁
【移動應(yīng)用開發(fā)技術(shù)】通過Gradle為APK瘦身_第3頁
免費(fèi)預(yù)覽已結(jié)束,剩余1頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

【移動應(yīng)用開發(fā)技術(shù)】通過Gradle為APK瘦身

引言:在過去幾年中,APK文件的大小曾急劇增長態(tài)勢。一般來說,其原因如下:Android開發(fā)者獲取了更多的依賴庫,添加了更多的密度,Apps增加了更多的功能。但實(shí)際上我們應(yīng)該讓APKs盡可能的小,更小的APK意味著用戶可以更快地下載和安裝應(yīng)用,并使它占用更小的內(nèi)存。

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

本文選自《GradleforAndroid中文版》,將研究如何設(shè)置Gradle構(gòu)建配置文件中的幾個(gè)屬性,以縮小APK文件。ProGuard是一個(gè)Java工具,其不僅可以縮減APK文件大小,還可以在編譯期優(yōu)化、混淆和預(yù)校驗(yàn)?zāi)愕拇a。其通過你應(yīng)用的所有代碼路徑,來找到未被使用的代碼,并將其刪除。

ProGuard還會重命名你的類和字段。這一過程將保留應(yīng)用的蹤跡,讓反編譯工程師更加難以讀懂代碼。

在Gradle的Android插件中,其構(gòu)建類型下面有一個(gè)叫作minifyEnabled的布爾類型屬性,你需要將它設(shè)置為true來激活ProGuard:android

{

buildTypes

{

release

{

minifyEnabled

true

proguardFiles

getDefaultProguardFile

('proguard-android.txt'),

''

}

}

}當(dāng)minifyEnabled被設(shè)置為true后,在構(gòu)建過程中,proguardReleasetask會被執(zhí)行,并調(diào)用ProGuard。

在激活ProGuard之后,應(yīng)重新測試整個(gè)應(yīng)用,因?yàn)镻roGuard可能會移除一些你仍需要使用的代碼。這也是很多開發(fā)者不喜歡ProGuard的原因。為了解決這個(gè)問題,你可以定義ProGuard規(guī)則,排除那些被刪除或混淆的類。我們可以使用proguardFiles屬性來定義包含ProGuard規(guī)則的文件。例如,為了保留一個(gè)類,你可以像下面這樣添加一條簡單的規(guī)則:-keep

public

class

<MyClass>getDefaultProguardFile(‘proguard-android.txt’)方法從AndroidSDK的tools/proguard文件夾下的proguard-android.txt文件中獲取默認(rèn)的ProGuard設(shè)置。

在AndroidStudio中,文件被默認(rèn)添加到新的Android模塊,所以你可以在該文件中簡單地添加一些針對該模塊的規(guī)則。提示:你構(gòu)建的每個(gè)應(yīng)用或依賴庫都有不同的ProGuard規(guī)則,所以在本書中,我們不會考慮更多的細(xì)節(jié)。如果你想了解更多關(guān)于ProGuard和ProGuard規(guī)則的信息,則可以通過/tools/help/proguard.html.來查閱AndroidProGuard的官方文檔。除了縮減Java代碼外,還可以縮減使用過的資源。提示:你構(gòu)建的每個(gè)應(yīng)用或依賴庫都有不同的ProGuard規(guī)則,所以在本書中,我們不會考慮更多的細(xì)節(jié)。如果你想了解更多關(guān)于ProGuard和ProGuard規(guī)則的信息,則可以通過/tools/help/proguard.html.來查閱AndroidProGuard的官方文檔。除了縮減Java代碼外,還可以縮減使用過的資源。當(dāng)給App打包時(shí),Gradle和Gradle的Android插件可以在構(gòu)建期間刪除所有未使用的資源。如果你有舊的資源忘記刪除,那么這個(gè)功能可能非常有用。另外一個(gè)使用案例是當(dāng)你導(dǎo)入一個(gè)擁有很多資源的依賴庫,而你只使用了其中的一小部分時(shí),你可以通過激活縮減資源來解決這個(gè)問題??s減資源的方式有兩種:自動和手動。自動縮減最簡單的方式是在你的構(gòu)建中設(shè)置shrinkResources屬性。如果設(shè)置該屬性為true,則Android構(gòu)建工具將自動判定哪些資源沒有被使用,并將它們排除在APK外。使用此功能有一個(gè)要求,即必須同時(shí)啟動ProGuard。這是因?yàn)榭s減資源的工作方式是,直到代碼引用這些資源被刪除之前,Android構(gòu)建工具不能指出哪些資源沒有被用到。

下面的代碼片段展示了在某個(gè)構(gòu)建類型中,如何配置自動化資源縮減:android

{

buildTypes

{

release

{

minifyEnabled

=

true

shrinkResources

=

true

}

}

}如果你想看看在激活了自動化資源縮減之后,APK縮減了多少,則可以運(yùn)行shrink-ReleaseResources任務(wù)。該任務(wù)會打印出包的大小縮小了多少::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會打印出許多關(guān)于構(gòu)建過程的額外信息,包括最終構(gòu)建不會輸出的每個(gè)資源。

自動資源縮減有一個(gè)問題,即它可能移除了過多的資源,特別是那些被動態(tài)使用的資源可能被意外刪除。為了防止這種情況的發(fā)生,你可以在res/raw/下的一個(gè)叫作keep.xml的文件中定義這些例外。一個(gè)簡單的keep.xml文件如下所示:<?xml

version="1.0"

encoding="utf-8"?><resources

xmlns:tools="/tools"tools:keep="@layout/keep_me,@layout/also_used_*"/>keep.xml文件自身也將從最終的結(jié)果中被剝離出來。手動縮減去除某種語言文件或某個(gè)密度的圖片,是刪減資源的一種比較好的方式。一些依賴庫,例如GooglePlayServices,其包含了多種語言。如果你的應(yīng)用只支持一兩種語言,那么在最終的APK中,包含所有語言的文件就會浪費(fèi)許多資源。這時(shí)你就可以使用resConfigs屬性來配置你想保留的資源,將其余部分刪除。

如果你只想保留英語、丹麥語和荷蘭語的字符串,則可以這樣使用resConfigs:android

{

defaultConfig

{

resConfigs

“en",

“da",

“nl"

}

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

{

defaultConfig

{

resConfigs

“hdpi",

“xhdpi",

“xxhdpi",

“xxxhdpi"

}

}你甚至可以結(jié)合語言和密度。實(shí)際上,使用此屬性可以限制每一種類型的資源。

如果設(shè)置ProGuard讓你感覺很困難,或者你僅僅想在應(yīng)用中去除不支持的語言資源或密度,那么你可以使用resConfigs來縮減資源。

本文選自《GradleforAndroid中文版》,點(diǎn)此鏈接可在博文視點(diǎn)官網(wǎng)查看。

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論