最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android開(kāi)發(fā)ProGuard使用技巧掌握

 更新時(shí)間:2022年11月18日 11:49:37   作者:Himanshu?Singh  
這篇文章主要為大家介紹了Android開(kāi)發(fā)ProGuard使用技巧的掌握,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

前言

在構(gòu)建 Android 應(yīng)用程序時(shí),我們可能在項(xiàng)目中使用了 ProGuard。在這篇文章中,我們將了解所有功能以及如何在 Android 中有效地使用 ProGuard。

因此,讓我們將其分解為以下幾點(diǎn):

什么是 ProGuard?

ProGuard 是 Android 中的免費(fèi) java 工具,它可以幫助我們執(zhí)行以下操作,

  • 縮?。s小)代碼:刪除項(xiàng)目中未使用的代碼。
  • 混淆代碼:重命名類(lèi)、字段等的名稱(chēng)。
  • 優(yōu)化代碼:做內(nèi)聯(lián)函數(shù)之類(lèi)的事情。

簡(jiǎn)而言之,ProGuard 對(duì)我們的項(xiàng)目產(chǎn)生了以下影響,

  • 它減小了應(yīng)用程序的大小。
  • 它刪除了導(dǎo)致 Android 應(yīng)用程序的 64K 方法計(jì)數(shù)限制的未使用類(lèi)和方法。
  • 它通過(guò)混淆代碼使應(yīng)用程序難以進(jìn)行逆向工程。

它對(duì)我們的應(yīng)用程序有什么用處?

在 Android 中,proguard 對(duì)于制作可用于生產(chǎn)的應(yīng)用程序非常有用。它可以幫助我們減少代碼并使應(yīng)用程序更快。默認(rèn)情況下,Proguard 在 Android Studio 中是開(kāi)箱即用的,它在很多方面都有幫助,下面提到的很少,

  • 它混淆了代碼,這意味著它將名稱(chēng)更改為一些較小的名稱(chēng),例如MainViewModel它可能會(huì)將名稱(chēng)更改為A。在混淆應(yīng)用程序之后,您的應(yīng)用程序的逆向工程現(xiàn)在成為一項(xiàng)艱巨的任務(wù)。
  • 它縮小了資源,即忽略了我們的類(lèi)文件沒(méi)有調(diào)用的資源,沒(méi)有在我們的android應(yīng)用程序中使用,比如drawables中的圖像等。這將大大減少應(yīng)用程序的大小。您應(yīng)該始終縮小您的應(yīng)用程序以使其重量輕且速度快。

如何在我們的項(xiàng)目中使用它?

要在您的項(xiàng)目中啟用 Proguard,請(qǐng)?jiān)趹?yīng)用程序的 build.gradle 添加,

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

在這里,我們minfyEnabled確實(shí)如此,它激活了從文件中獲取的proguard,

proguard-android.txt

它在發(fā)布?jí)K下,這意味著它只會(huì)應(yīng)用于我們生成的構(gòu)建的發(fā)布。

但有時(shí)當(dāng) proguard 刪除太多代碼時(shí)它可能太多了,它可能會(huì)破壞你的代碼流。

因此,配置代碼我們必須添加一些自定義規(guī)則,以確保我們從混淆中刪除代碼集。我們可以通過(guò)在我們的 proguard 中編寫(xiě)自定義規(guī)則來(lái)解決這個(gè)問(wèn)題,它會(huì)在生成構(gòu)建時(shí)遵守。

現(xiàn)在,讓我們看看如何在 proguard 中編寫(xiě)自定義規(guī)則。

1. 保存類(lèi)文件假設(shè)我們有一個(gè)數(shù)據(jù)類(lèi),某些 API 需要它來(lái)執(zhí)行它,但它會(huì)生成我們對(duì)類(lèi)進(jìn)行混淆的構(gòu)建。例如,我們有一個(gè)用戶(hù)數(shù)據(jù)類(lèi),

data class User(val id: String = "")

我們不想混淆生成構(gòu)建的類(lèi),然后忽略它的混淆,我們使用@Keep注釋并更新代碼,例如,

@Keep
data class User(val id: String = "")

此注釋有助于在縮小時(shí)使用 proguard 來(lái)忽略該類(lèi)。這將保留類(lèi)及其成員函數(shù),即使它們不被使用。

我們還可以使用,

-keep

在生成構(gòu)建時(shí)保留類(lèi)的選項(xiàng)。使用-keep而不是@Keep,我們可以更好地控制要保留的內(nèi)容和不保留的內(nèi)容。

但是,我們也可以通過(guò)使用@SerializedName(當(dāng)使用 Gson 庫(kù)時(shí))來(lái)保留數(shù)據(jù)模型類(lèi)中id字段的鍵,例如,

data class User(@SerializedName("id")
                 val id: String = "")

如果你注意到這里,我們沒(méi)有使用@Keep。

2. 為班級(jí)保留成員假設(shè)我們想在收縮時(shí)只保留類(lèi)成員而不是類(lèi),然后我們使用,

-keepclassmembers

在 proguard 規(guī)則文件中。這將幫助我們忽略特定類(lèi)的成員。

考慮上面的 User 類(lèi),我們希望保留其中的所有公共方法。我們這樣寫(xiě)規(guī)則,

-keepclassmembers class com.mindorks.sample.User{
    public *;
}

在這里,類(lèi) User 保留所有具有公共修飾符的成員。

3. 保留班級(jí)和成員的名字假設(shè)我們希望在代碼中使用類(lèi)和類(lèi)成員的所有相同名稱(chēng),即如果未使用該類(lèi),它將被 proguard 縮小但不會(huì)混淆,因?yàn)樗呀?jīng)被縮小了,所以沒(méi)有需要混淆。

要完成我們使用的上述任務(wù),

-keepnames

它的實(shí)際使用看起來(lái)像,

-keepnames class com.mindorks.sample.GlideModule

在這里,如果 GlideModule 將保留其所有的類(lèi)名稱(chēng)和成員函數(shù)。

4.在Android中使用任何庫(kù)在使用任何庫(kù)時(shí),我們可能希望為 proguard 編寫(xiě)一些自定義規(guī)則。庫(kù)可能會(huì)在 logcat 中引發(fā)警告,或者他們甚至可能沒(méi)有自己的 proguard 規(guī)則!

為了解決這個(gè)問(wèn)題,我們需要在應(yīng)用程序端添加自定義規(guī)則。例如,如果我們開(kāi)始從任何庫(kù)中收到警告,那么我們添加,

-dontwarn com.somelibrary.annotations.*

在我們的 proguard 規(guī)則中,然后我們不會(huì)在日志中看到任何警告。

要為庫(kù)編寫(xiě)自定義規(guī)則,您可以像為自己的類(lèi)編寫(xiě)任何其他規(guī)則一樣編寫(xiě)它。

5. 只混淆你的代碼考慮一個(gè)非常罕見(jiàn)的用例,您只想混淆代碼而不壓縮任何資源。這是一個(gè)非常罕見(jiàn)的用例,但可能對(duì)一些小型庫(kù)有用,然后我們編寫(xiě)如下標(biāo)志,

-dontshrink
-dontoptimize

這將幫助我們不縮小和優(yōu)化代碼而只是混淆。

6. 維護(hù)注解在構(gòu)建應(yīng)用程序時(shí),ProGuard 會(huì)刪除所有注釋?zhuān)赡苋匀贿m用于您項(xiàng)目中的某些代碼集。但是假設(shè)我們需要不刪除注釋?zhuān)敲次覀兛梢赃x擇,

-keepattributes *Annotation*

在這里,它將所有注釋的屬性保留在您的應(yīng)用程序中。它默認(rèn)出現(xiàn)在我們的規(guī)則中。

7.優(yōu)化在 ProGuard 中編寫(xiě)了這么多規(guī)則之后,我們可能需要為我們的應(yīng)用程序提供額外的優(yōu)化層。首先,我們更新build.gradle文件,例如,

android {
  buildTypes {
    release {
      proguardFiles getDefaultProguardFile('proguard-android-optimize.txt')
    }
  }
}

現(xiàn)在,一般來(lái)說(shuō),我們不使用此選項(xiàng),但這里的用例是我們必須執(zhí)行額外級(jí)別的優(yōu)化。

為了增加優(yōu)化的周期數(shù),例如我們想檢查優(yōu)化是否正確完成,如果沒(méi)有完成,它將再次優(yōu)化它直到我們使用一定次數(shù),

-optimizationpasses 5

在這里,它將運(yùn)行優(yōu)化多達(dá) 5 次以使其更加優(yōu)化。

現(xiàn)在,考慮一個(gè)示例,與以前相比,我們希望更細(xì)粒度地優(yōu)化最終類(lèi),我們使用,

-optimizations class/marking/final

在這里,最終的類(lèi)將被優(yōu)化最多 5 倍,或者如果優(yōu)化已經(jīng)完成,它甚至可能提前結(jié)束。

現(xiàn)在,如果我們想優(yōu)化我們現(xiàn)在使用的私有字段,

-optimizations field/marking/private

大多數(shù)情況下,優(yōu)化是第一次完成。

如果我們根本不想優(yōu)化我們使用,

-dontoptimize

這就是我們?nèi)绾我圆煌姆绞绞褂?proguard 使我們的應(yīng)用程序更安全和更輕便的工作方式。

需要注意的重要事項(xiàng):

  • 不要使用MainFragment.class.getSimpleName() 之類(lèi)的東西作為片段標(biāo)簽。Proguard 可能會(huì)在混淆時(shí)為不同包中的兩個(gè)不同片段分配相同的名稱(chēng)(A.class)。在這種情況下,兩個(gè)片段將具有相同的 TAG。這將導(dǎo)致您的應(yīng)用程序中的錯(cuò)誤。
  • 保留 Proguard 的映射文件以追溯到原始代碼。您可能必須將其上傳到 PlayStore 控制臺(tái)等不同的地方才能查看崩潰的原始堆棧跟蹤。

翻譯鏈接

https://blog.mindorks.com/applying-proguard-in-an-android-application

以上就是Android開(kāi)發(fā)ProGuard使用技巧掌握的詳細(xì)內(nèi)容,更多關(guān)于Android開(kāi)發(fā)ProGuard使用的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • android Web跳轉(zhuǎn)到app指定頁(yè)面并傳遞參數(shù)實(shí)例

    android Web跳轉(zhuǎn)到app指定頁(yè)面并傳遞參數(shù)實(shí)例

    這篇文章主要介紹了android Web跳轉(zhuǎn)到app指定頁(yè)面并傳遞參數(shù)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-03-03
  • Android實(shí)現(xiàn)隱藏手機(jī)底部虛擬按鍵

    Android實(shí)現(xiàn)隱藏手機(jī)底部虛擬按鍵

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)隱藏手機(jī)底部虛擬按鍵,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • Android自定義view仿QQ的Tab按鈕動(dòng)畫(huà)效果(示例代碼)

    Android自定義view仿QQ的Tab按鈕動(dòng)畫(huà)效果(示例代碼)

    這篇文章主要介紹了Android自定義view仿QQ的Tab按鈕動(dòng)畫(huà)效果(示例代碼),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考價(jià)值,需要的朋友可以參考下
    2021-01-01
  • Android Studio實(shí)現(xiàn)帶邊框的圓形頭像

    Android Studio實(shí)現(xiàn)帶邊框的圓形頭像

    這篇文章主要為大家詳細(xì)介紹了Android Studio實(shí)現(xiàn)帶邊框的圓形頭像,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • Android實(shí)現(xiàn)彩信附件的添加與刪除功能

    Android實(shí)現(xiàn)彩信附件的添加與刪除功能

    這篇文章主要介紹了Android實(shí)現(xiàn)彩信附件的添加與刪除功能,涉及Android針對(duì)常見(jiàn)多媒體文件的操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2016-06-06
  • android 把float轉(zhuǎn)換成Int的實(shí)例講解

    android 把float轉(zhuǎn)換成Int的實(shí)例講解

    今天小編就為大家分享一篇android 把float轉(zhuǎn)換成Int的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • Flutter進(jìn)階之實(shí)現(xiàn)動(dòng)畫(huà)效果(一)

    Flutter進(jìn)階之實(shí)現(xiàn)動(dòng)畫(huà)效果(一)

    這篇文章主要為大家詳細(xì)介紹了Flutter實(shí)現(xiàn)動(dòng)畫(huà)效果的第一篇,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • Android 自定義view實(shí)現(xiàn)水波紋動(dòng)畫(huà)效果

    Android 自定義view實(shí)現(xiàn)水波紋動(dòng)畫(huà)效果

    這篇文章主要介紹了 Android 自定義view實(shí)現(xiàn)水波紋動(dòng)畫(huà)效果的實(shí)例代碼,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧
    2017-01-01
  • App中如何獲取gradle的配置信息

    App中如何獲取gradle的配置信息

    這篇文章主要給大家介紹了關(guān)于App中如何獲取gradle的配置信息的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-02-02
  • 詳解在Flutter中如何使用dio

    詳解在Flutter中如何使用dio

    應(yīng)用程序開(kāi)發(fā)的一個(gè)關(guān)鍵部分是優(yōu)雅地處理網(wǎng)絡(luò)請(qǐng)求。網(wǎng)絡(luò)返回的響應(yīng)可能包含意想不到的結(jié)果,為了獲得良好的用戶(hù)體驗(yàn),您需要提前處理邊緣情況。本文將詳細(xì)為大家介紹Flutter如何使用dio,需要的可以參考一下
    2022-04-04

最新評(píng)論

孟州市| 汉阴县| 儋州市| 天柱县| 历史| 维西| 紫阳县| 无极县| 甘泉县| 运城市| 托克逊县| 昌江| 江孜县| 西畴县| 当阳市| 五常市| 兴海县| 琼海市| 四平市| 淳化县| 霍邱县| 海林市| 正安县| 泰兴市| 盐源县| 怀远县| 高清| 泸州市| 舟山市| 丁青县| 德州市| 和硕县| 商水县| 日喀则市| 林甸县| 阳江市| 台南县| 定南县| 习水县| 陵水| 建湖县|