


下載本文檔
版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年軍隊(duì)文職人員招聘之軍隊(duì)文職管理學(xué)考前沖刺模擬試卷A卷含答案
- 2025年軍隊(duì)文職人員招聘之軍隊(duì)文職公共科目題庫檢測試卷B卷附答案
- 2025年消防設(shè)施操作員之消防設(shè)備高級技能能力提升試卷B卷附答案
- 采購分包資源配置合同(2篇)
- 2023年全國碩士研究生考試《管理類聯(lián)考綜合能力》試題真題及答案
- 2025年黨史競賽知識題庫70題及答案
- 會計(jì)學(xué)成本會計(jì)模擬試題集
- 各行業(yè)各年度數(shù)據(jù)對比表格
- 泰坦尼克號的文化價(jià)值和社會反思:高中語文教學(xué)教案
- 經(jīng)濟(jì)學(xué)微觀經(jīng)濟(jì)學(xué)知識點(diǎn)歸納與解析
- 07SG111-1 建筑結(jié)構(gòu)加固施工圖設(shè)計(jì)表示方法
- 屋頂分布式光伏發(fā)電EPC項(xiàng)目 投標(biāo)方案(技術(shù)方案)
- 網(wǎng)約車停運(yùn)損失費(fèi)起訴狀模板
- 中國急性缺血性卒中診治指南(2023)解讀
- A型肉毒素治療知情同意書 注射知情同意書
- 混凝土采購項(xiàng)目整體供貨方案
- 血液透析導(dǎo)管溶栓及護(hù)理
- 公司外聘人員管理制度
- 慢病聯(lián)合用藥病
- 蘭州拉面-模板參考
- 武漢市2024屆高中畢業(yè)生二月調(diào)研考試(二調(diào))英語試卷(含答案)
評論
0/150
提交評論