1. 程式人生 > >Android Studio 程式碼混淆注意問題

Android Studio 程式碼混淆注意問題

Java 是一種跨平臺的、解釋型語言,Java 原始碼編譯成中間”位元組碼”儲存於 class 檔案中。由於跨平臺的需要,Java 位元組碼中包括了很多原始碼資訊,如變數名、方法名,並且通過這些名稱來訪問變數和方法,這些符號帶有許多語義資訊,很容易被反編譯成 Java 原始碼。為了防止這種現象,我們可以使用 Java 混淆器對 Java 位元組碼進行混淆。

語法

123456789101112131415161718192021222324252627282930313233343536373839404142 -include{filename}從給定的檔案中讀取配置引數-basedirectory{directoryname}指定基礎目錄為以後相對的檔案名稱-injars{class_path}指定要處理的應用程式jar,war,ear和目錄-outjars{class_path}指定處理完後要輸出的jar,war,ear和目錄的名稱-libraryjars{classpath
}指定要處理的應用程式jar,war,ear和目錄所需要的程式庫檔案-dontskipnonpubliclibraryclasses指定不去忽略非公共的庫類。-dontskipnonpubliclibraryclassmembers指定不去忽略包可見的庫類的成員。保留選項-keep{Modifier}{class_specification}保護指定的類檔案和類的成員-keepclassmembers{modifier}{class_specification}保護指定類的成員,如果此類受到保護他們會保護的更好-keepclasseswithmembers{class_specification
}保護指定的類和類的成員,但條件是所有指定的類和類成員是要存在。-keepnames{class_specification}保護指定的類和類的成員的名稱(如果他們不會壓縮步驟中刪除)-keepclassmembernames{class_specification}保護指定的類的成員的名稱(如果他們不會壓縮步驟中刪除)-keepclasseswithmembernames{class_specification}保護指定的類和類的成員的名稱,如果所有指定的類成員出席(在壓縮步驟之後)-printseeds{filename}列出類和類的成員-keep選項的清單,標準輸出到給定的檔案壓縮-dontshrink不壓縮輸入的類檔案-printusage{filename}-dontwarn如果有警告也不終止-whyareyoukeeping{class_specification}優化-dontoptimize不優化輸入的類檔案-assumenosideeffects{class_specification}優化時假設指定的方法,沒有任何副作用-allowaccessmodification優化時允許訪問並修改有修飾符的類和類的成員混淆-dontobfuscate不混淆輸入的類檔案-printmapping{filename}-applymapping{filename}重用對映增加混淆-obfuscationdictionary{filename}使用給定檔案中的關鍵字作為要混淆方法的名稱-overloadaggressively混淆時應用侵入式過載-useuniqueclassmembernames確定統一的混淆類的成員名稱來增加混淆-flattenpackagehierarchy{package_name}重新包裝所有重新命名的包並放在給定的單一包中-repackageclass{package_name}重新包裝所有重新命名的類檔案中放在給定的單一包中-dontusemixedcaseclassnames混淆時不會產生形形色色的類名-keepattributes{attribute_name,...}保護給定的可選屬性,例如LineNumberTable,LocalVariableTable,SourceFile,Deprecated,Synthetic,Signature,andInnerClasses.-renamesourcefileattribute{string}設定原始檔中給定的字串常量

不能混淆的程式碼

顧名思義,不能混淆程式碼如果被混淆了,就會出現錯誤。

  1. 需要反射的程式碼
  2. 系統介面
  3. Jni介面
  4. 需要序列號和反序列化的程式碼(即實現Serializable介面的JavaBean)
  5. 與服務端進行元資料互動的JavaBean(JSON、XML中對應的類)

常見錯誤

1) Proguard returned with error code 1. See console

更新proguard版本
android-support-v4 不進行混淆
新增缺少相應的庫

2) 使用gson包解析資料時,出現 missing type parameter 異常

在 proguard-project.txt 中新增
-dontobfuscate
-dontoptimize
在 proguard-project.txt 中新增
# removes such information by default, so configure it to keep all of it.
-keepattributes Signature
# Gson specific classes
-keep class sun.misc.Unsafe { *; }
#-keep class com.google.gson.stream.* { ; }
# Application classes that will be serialized/deserialized over Gson
-keep class com.google.gson.examples.android.model.* { ; }

3) 型別轉換錯誤

在 proguard-project.txt 中新增
-keepattributes Signature

4) 空指標異常

混淆過濾掉相關類與方法

5) java.lang.reflect.UndeclaredThrowableException

-keep interface com.dev.impl.**

6) Error: Unable to access jarfile ..libproguard.jar

路徑問題

7) java.lang.NoSuchMethodError

這也是最常見的問題,因為找不到相關方法,方法被混淆了,混淆過濾掉相關方法便可。

下面是我實際專案中的混淆配置:

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269 #---------------------------------1.實體類----------------------------------keep classcom.package.bean.**{*;}#-------------------------------------------------------------------------#---------------------------------2.第三方包-------------------------------#eventBus-keepattributes*Annotation*-keepclassmembersclass**{@org.greenrobot.eventbus.Subscribe;}-keep enumorg.greenrobot.eventbus.ThreadMode{*;}-keepclassmembers class*extendsorg.greenrobot.eventbus.util.ThrowableFailureEvent{(java.lang.Throwable);}#glide-keep publicclass*implementscom.bumptech.glide.module.GlideModule-keep publicenumcom.bumptech.glide.load.resource.bitmap.ImageHeaderParser$**{**[]$VALUES;public*;}-keep classcom.bumptech.glide.**{*;}#retrofit2-dontwarn retrofit2.**-keep classretrofit2.**{*;}-keepattributes Signature-keepattributes Exceptions-dontwarn org.robovm.**-keep classorg.robovm.**{*;}#okhttp3-dontwarn com.squareup.okhttp3.**-keep classcom.squareup.okhttp3.**{*;}-keep classokhttp3.**{*;}-keep classokio.**{*;}-dontwarn sun.security.**-keep classsun.security.**{*;

相關推薦

Android Studio 程式碼混淆注意問題

Java 是一種跨平臺的、解釋型語言,Java 原始碼編譯成中間”位元組碼”儲存於 class 檔案中。由於跨平臺的需要,Java 位元組碼中包括了很多原始碼資訊,如變數名、方法名,並且通過這些名稱來訪問變數和方法,這些符號帶有許多語義資訊,很容易被反編譯成 Java 原始碼。

android studio 程式碼混淆

原文連結   http://blog.csdn.net/ttccaaa/article/details/47687241  侵刪 關於程式碼混淆的作用,就不多解釋了,整個過程大致如下: 在app下的build.gradle檔案中新增如下程式碼(minifyEna

Android Studio 程式碼混淆配置大全

proguard 配置 -keepclasseswithmembers 指定的類和類成員被保留,假如指定的類成員存在的話。 -dontwarn 預設proguard 會檢查每一個引用是否正確,但是第三方庫裡面往往有些不會用到的類,沒有正確引用。如果不配置的話,系統就會

Android 打包 + 程式碼混淆

一:打包生成一個 Apk            生成一個 Apk 是比較簡單的,直接使用 Android Stuido 的打包工具就可以快速的生成一個 Apk 檔案,在這裡多插一句題外話吧,嘿嘿,就是關於使用多渠道打包和一套程式碼打

糾偏 關於Android studio程式碼模糊不清的解決方案

很多人都已經搜到過了類似的帖子,主張把字型字號設成14,把字型改成dialogInput,如此這般。 這的確管用,但只對預設的面板有用(白色風格的那個),黑色風格那個就不好使。 其實是漏掉了一個步驟,我們還需要把這個位置改一下, 用Color Scheme Font 替代預設的字型,要選中,黑色

Android studio程式碼實現打電話+點選事件四種方式

?Android系統架構(重點) 第一層:應用層Application 第二層:應用框架層Application Framework 第三層:Android底層類庫層 Libraries、Dalvik虛擬機器 第四層:linux核心層 linux kernel Android是執行在

Android Studio 匯入vitamio注意事項

1.官方下載的例項裡包含了vitamio和vitamioSample,一個是開發工具包,一個是官方示例。 2.Android Studio通過import mudle來匯入vitamio開發包。 3.如果報了SDKVersion找不到的錯誤,那麼我們自己去配置vitamio目錄下面的grad

android studio程式碼對齊的快捷鍵

當XML檔案或者.java檔案中程式碼格式不整齊時,為了看著方便,看起來簡潔,對於方便 我們可以用 Ctrl + Alt +L 來調整,但是並不是完全的統一,你使用看看效果就知道了 另外需要提醒你一下,如果你想使用這個快捷鍵請把QQ下線,因為這個快捷鍵會將QQ鎖住 這也是我偶然發現的,鎖住之後

Android Studio程式碼標紅,import包名顯灰,但可正常執行的解決方法

一、自帶清除快取 點選AndroidStudio選單File -> Invalidate Caches/Restar… ,在彈出的對話方塊中點選Invalidate and Restar  。等待AS清理並自動重啟。  PS:在網上查找了下解決方法,很多都是介紹

Android studio 程式碼除錯

帶大家認識瞭解Android studio 除錯工具的每個功能      原文:http://blog.csdn.net/dd864140130/article/details/51560664 裡面詳細介紹了as的除錯工具,除錯方法,並有demo 並介紹了這5

Android Apk 程式碼混淆與資原始檔混淆實戰

Android專案在完工釋出時,需要對程式碼和資原始檔進行混淆,目的有兩個: 1⃣️減小壓縮包的體積 2⃣️防止程式碼被反編譯後惡意利用 Android Apk混淆分兩步走: 1⃣️混淆程式碼 2⃣️混淆資原始檔 本人的開發環境為: Oper

android studio 程式碼bug檢測.外掛FindBugs

最近忙於寫專案,閒暇時間又迷戀上FB,所以感覺自己虛無的時候,趕緊學學技術文章。 在逛掘金時,捕捉到這麼一篇文章《覺得自己程式碼寫得不夠好?那就用Android程式碼優化工具吧~》原文連結:https

關於android studio程式碼提示的問題

今天在寫一個類,是關於RSA加解密的工具,然而當我完成這個類之後,我在onCreate方法裡敲入RSA,android studio並沒有提示我自己的類,即使是手動輸完蛋整個類的名字,再輸入 . (一個點)也沒有提示出類裡面的公共方法,而手動敲完整個類名及

eclipse Android開發程式碼混淆

  程式碼混淆對於一個完善的app 必不可少的    1、新建一個Android 專案時,會自動生成兩個檔案proguard-project.txt ,  project.properties   只需要將project.properties

Android studio打包混淆編譯的時候出現異常:transformClassesAndResourcesWithProguardForRelease

具體異常資訊擷取如下: Browser/build/intermediates/exploded-aar/com.google.android.gms/play-services-analytics/7.8.0/jars/classes.jar(;;;;;;**.clas

[Android]檢視程式碼混淆後的日誌

APP混淆已經是APP釋出時的標配技術了,但是我們經常需要去看使用者使用APP時的崩潰日誌,這個時候,看到的日誌確是被混淆了,比如a.b.c.c()!就要狂了。所以,Google當然會為我們考慮到這種情況。下面對具體的使用進行說明。 程式碼混淆生成apk之後,

[windows]Android Studio程式碼重構常用快捷鍵

———————–如果不願意使用右鍵的夥伴可以使用:Ctrl+Alt+Shift+T:快速呼叫彈框—– 1.抽取 抽取變數 游標放在你自定義的常量上 Ctrl+Alt+V 抽取常量 游標放在你自定義的常量上 Ctrl+Alt+C 抽取欄位 將本地變數轉成類

帶你徹底明白 Android Studio 打包混淆

前言在使用Android Studio混淆打包時,該IDE自身集成了Java語言的ProGuard作為壓縮,優化和混淆工具,配合Gradle構建工具使用很簡單。只需要在工程應用目錄的gradle檔案中設定minifyEnabled為true即可。然後我們就可以到proguar

Android APP程式碼混淆proguard和加固

    proguard官方網址:http://proguard.sourceforge.net/index.html#/manual/examples.html  一、在gradle中開啟: Gradle專案(以及Android Studio) 在build.gradle中進行配置 android {

Android Studio打包混淆帶資源的SDK

           最近要實現一個把自己的整個應用打包成SDK接入到合作公司的應用中,剛開始是想採用外掛(如360的DroidPlugin,原理解析連結:分析DroidPlugin,深入理解外掛化框架)的形式來做,這樣的話很方便,只要提供一個apk就行了。但是問題來了,一