製作過程中教你程式碼不會被反編譯
作為Android應用開發者,不得不面對一個尷尬的局面,就是自己辛辛苦苦開發的應用可以被別人很輕易的就反編譯出來。 Google似乎也發現了這個問題,從SDK2.3開始我們可以看到在android-sdk-windows\tools\下面多了一個proguard資料夾 proguard是一個java程式碼混淆的工具,通過proguard,別人即使反編譯你的apk包,也只會看到一些讓人很難看懂的程式碼,從而達到保護程式碼的作用。 在工程的"default.properties"中新增這樣一句話“proguard.config=proguard.cfg” 打包簽名後的.apk就是混淆的,其實我們只要做一步就可以了就是在"default.properties"中新增這樣一句話“proguard.config=proguard.cfg”就可以了。 如果想要更加複雜地混淆程式碼,可以詳細地對該檔案進行配置.
由於apk是Android虛擬機器載入的,它有一定的規範,加密apk後Dalvik無法識別apk了。完全避免是不可能的,三九藍荷茶:http://www.wk39.com/總有人能夠破解你的程式碼。但是有幾種 方式來提高被反編譯取程式碼的難度:
1 關鍵程式碼使用jni呼叫原生程式碼,用c或者c++編寫,因此相對比較難於反編譯
2 混淆java程式碼。混淆是不改變程式碼邏輯的情況下,三九藍荷茶:http://www.wk39.com/增加無用程式碼,或者重新命名,使反編譯後的原始碼難於看懂。
網上開源的java程式碼混淆工具較多,一般是用ant的方式來編譯的
android 混淆檔案proguard.cfg詳解: -injars androidtest.jar【jar包所在地址】 -outjars out【輸出地址】 -libraryjars 'D:\android-sdk-windows\platforms\android-9\android.jar' 【引用的庫的jar,用於解析injars所指定的jar類】
-optimizationpasses 5 -dontusemixedcaseclassnames 【混淆時不會產生形形色色的類名 】 -dontskipnonpubliclibraryclasses 【指定不去忽略非公共的庫類。 】 -dontpreverify 【不預校驗】 -verbose -optimizations !code/simplification/arithmetic,!field/,!class/merging/ 【優化】 -keep public class * extends android.app.Activity 【不進行混淆保持原樣】 -keep public class * extends android.app.Application -keep public class * extends android.app.Service -keep public class * extends android.content.BroadcastReceiver -keep public class * extends android.content.ContentProvider -keep public class * extends android.app.backup.BackupAgentHelper -keep public class * extends android.preference.Preference -keep public class com.android.vending.licensing.ILicensingService -keep public abstract interface com.asqw.android.Listener{ public protected ; 【所有方法不進行混淆】 } -keep public class com.asqw.android{ public void Start(java.lang.String); 【對該方法不進行混淆】 } -keepclasseswithmembernames class * { 【保護指定的類和類的成員的名稱,如果所有指定的類成員出席(在壓縮步驟之後)】 native ; } -keepclasseswithmembers class * { 【保護指定的類和類的成員,但條件是所有指定的類和類成員是要存在。】 public (android.content.Context, android.util.AttributeSet); } -keepclasseswithmembers class * { public (android.content.Context, android.util.AttributeSet, int); } -keepclassmembers class * extends android.app.Activity {【保護指定類的成員,如果此類受到保護他們會保護的更好 】 public void *(android.view.View); } -keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); } -keep class * implements android.os.Parcelable {【保護指定的類檔案和類的成員】 public static final android.os.Parcelable$Creator *;
相關文章
- 程式碼混淆防止APP被反編譯指南APP編譯
- .NET 程式碼編譯過程編譯
- [譯] 製作 Vue 3 的過程Vue
- 一些防止java程式碼被反編譯的方法Java編譯
- 儲存過程編譯時會卡死儲存過程編譯
- 編譯過程編譯
- Java程式碼的編譯與反編譯那些事兒Java編譯
- C程式編譯過程淺析C程式編譯
- 編譯C++ 程式的過程編譯C++
- Android反編譯和程式碼混淆Android編譯
- APK反編譯後程式碼分析(一)APK編譯
- 優化C++程式碼(2):C++程式碼的編譯過程優化C++編譯
- 好好的程式碼突然編譯不過? 退出shell後,再次開啟shell又編譯過了?編譯
- 程式碼檢查過程中為什麼需要涉及到編譯呢?編譯
- C語言程式碼區錯誤以及編譯過程C語言編譯
- Java程式碼編譯和執行的整個過程Java編譯
- Javac編譯過程Java編譯
- 編譯核心過程編譯
- 詳解Linux 程式編譯過程Linux編譯
- .NET應用如何防止被反編譯編譯
- 編譯器的編譯基本過程編譯
- Latex — 寫作編譯過程中遇到問題記錄與總結編譯
- 反編譯系列教程(中)編譯
- 手把手教你搞懂 Android 反編譯Android編譯
- 學會用程式碼製作愛心!
- 編譯儲存過程時被卡死的處理方法編譯儲存過程
- 儲存過程被鎖無法編譯的解決儲存過程編譯
- 小程式反編譯教程編譯
- c#程式反編譯C#編譯
- 圖解Java程式編譯解釋過程圖解Java編譯
- 編譯連結過程編譯
- 編譯過程簡介編譯
- C++ 編譯過程C++編譯
- 反編譯獲取任何微信小程式原始碼編譯微信小程式原始碼
- Cython加密python程式碼防止反編譯加密Python編譯
- 手把手教你反編譯別人的 app編譯APP
- 手把手教你反編譯別人的app編譯APP
- 網站製作過程中把握的幾點網站