導航:首頁 > 操作系統 > android混淆native

android混淆native

發布時間:2023-03-03 07:56:22

android APP的破解技術有哪些如何防止反編譯

AndroidAPP破解主要依靠利用現有的各種工具,如下:1)APKtool2)dex2jar3)jd-gui4)簽名工具防止反編譯,介紹一種有效對抗native層代碼分析的方法——代碼混淆技術。代碼混淆的學術定義如下:代碼混淆(codeobfuscation)是指將計算機程序的代碼,轉換成一種功能上等價,所謂功能上的等價是指其在變換前後功能相同或相近。其解釋如下:程序P經過混淆變換為P『,若P沒有結束或錯誤結束,那麼P』也不能結束或錯誤結束;而且P『程序的結果應與程序P具有相同的輸出。否則P』不是P的有效的混淆。目前對於混淆的分類,普遍是以Collberg的理論為基礎,分為布局混淆(layoutobfuscation)、數據混淆(dataobfuscation)、控制混淆(controlobfuscation)和預防混淆(preventiveobfuscation)這四種類型。騰訊御安全保護方案提供了以上所述四種混淆分類的多維度的保護,布局混淆方面,御安全提供了針對native代碼層中的函數名進行了混淆刪除調試信息等功能;數據混淆方面,御安全提供了針對常量字元串加密及全局變數的混淆的功能;控制混淆方面,御安全針對代碼流程上,提供了扁平化,插入bogus分支以及代碼等價變換等功能;預防混淆方面,御安全在混淆過程中加入了針對主流反編譯器的預防混淆的代碼,能夠有效地抵抗其分析。御安全還對應用開發者提供不同等級的保護力度及多種混淆方式的功能的選擇,用戶可以根據自己的需求定製不同的混淆功能保護。同時,御安全保護方案除了提供代碼混淆保護方面的技術,還提供代碼虛擬化技術及反逆向、反調試等其他安全保護方案,綜合使用多種保護方案可以有效地提高代碼安全。

Ⅱ android studio 代碼混淆錯誤

1,androidstudio1.3之後的版本就沒有GenerateSignedAPK—RunProGuard這個選項了!要在build.grandle把minifyEnabled改成Ture就可以了!minifyEnabledtrue下面是我使用的代碼:#指定代碼的壓縮級別-optimizationpasses5#包明不混合大小寫-dontusemixedcaseclassnames#不去忽略非公共的庫類-#優化不優化輸入的類文件-dontoptimize#預校驗-dontpreverify#混淆時是否記錄日誌-verbose#混淆時所採用的演算法-optimizations!code/simplification/arithmetic,!field/*,!class/merging/*#保護註解-keepattributes*Annotation*#保持哪些類不被混淆#-keeppublicclass*extendsandroid.app.Fragment#如果有引用v4包可以添加下面這行-keeppublicclass*extendsandroid.support.v4.app.Fragment#忽略警告-ignorewarning#####################記錄生成的日誌數據,gradlebuild時在本項目根目錄輸出#################apk包內所有class的內部結構-mpclass_files.txt#未混淆的類和成員-printseedsseeds.txt#列出從apk中刪除的代碼-printusageunused.txt#混淆前後的映射-printmappingmapping.txt#####################記錄生成的日誌數據,gradlebuild時在本項目根目錄輸出-end################################混淆保護自己項目的部分代碼以及引用的第三方jar包library##########################-libraryjarslibs/xUtils-2.6.14.jar#-libraryjarslibs/alipaysdk.jar#-libraryjarslibs/alipaysecsdk.jar#-libraryjarslibs/alipayutdid.jar#-libraryjarslibs/wup-1.0.0-SNAPSHOT.jar#-libraryjarslibs/weibosdkcore.jar#三星應用市場需要添加:sdk-v1.0.0.jar,look-v1.0.1.jar#-libraryjarslibs/sdk-v1.0.0.jar#-libraryjarslibs/look-v1.0.1.jar#我是以libaray的形式引用了一個圖片載入框架,如果不想混淆keep掉-keepclasscom.nostra13.universalimageloader.**{*;}#忽略警告-dontwarncom.veidy.mobile.common.**#保留一個完整的包-keepclasscom.veidy.mobile.common.**{*;}#如果引用了v4或者v7包-dontwarnandroid.support.**############混淆保護自己項目的部分代碼以及引用的第三方jar包library-end###################-keeppublicclass*extendsandroid.view.View{#public(android.content.Context);#public(android.content.Context,android.util.AttributeSet);#public(android.content.Context,android.util.AttributeSet,int);#publicvoidset*();#}#保持native方法不被混淆-*{native;}#保持自定義控制項類不被混淆#-keepclasseswithmembersclass*{#public(android.content.Context,android.util.AttributeSet);#}#保持自定義控制項類不被混淆#-keepclasseswithmembersclass*{#public(android.content.Context,android.util.AttributeSet,int);#}#保持自定義控制項類不被混淆#-keepclassmembersclass*extendsandroid.app.Activity{#publicvoid*(android.view.View);#}#保持Parcelable不被混淆-keepclass*implementsandroid.os.Parcelable{publicstaticfinalandroid.os.Parcelable$Creator*;}#保持Serializable不被混淆-keepnamesclass*implementsjava.io.Serializable#保持Serializable不被混淆並且enum類也不被混淆-keepclassmembersclass*implementsjava.io.Serializable{;privatestaticfinaljava.io.ObjectStreamField[]serialPersistentFields;!static!transient;!private;!private;privatevoidwriteObject(java.io.ObjectOutputStream);privatevoidreadObject(java.io.ObjectInputStream);java.lang.ObjectwriteReplace();java.lang.ObjectreadResolve();}#保持枚舉enum類不被混淆如果混淆報錯,建議直接使用上面的-keepclassmembersclass*implementsjava.io.Serializable即可#-keepclassmembersenum*{#publicstatic**[]values();#publicstatic**valueOf(java.lang.String);#}-keepclassmembersclass*{publicvoid*ButtonClicked(android.view.View);}#不混淆資源類-keepclassmembersclass**.R$*{publicstatic;}#避免混淆泛型如果混淆報錯建議關掉#–keepattributesSignature#移除log測試了下沒有用還是建議自己定義一個開關控制是否輸出日誌-.util.Log{publicstaticbooleanisLoggable(java.lang.String,int);publicstaticintv();publicstaticinti();publicstaticintw();publicstaticintd();publicstaticinte();}

Ⅲ android項目對apk進行混淆

    混淆apk是一個很基礎的工作,博客上也有一堆介紹,本文提供一下這類工作的解決思路。在安卓源碼下面和android studio裡面的做法差異不大,本文以android源碼舉例。
    首先在對應mk文件裡面添加proguard enabled的語句,系統有一個自帶的build/core/proguard.flags,默認是使用這個文件,而且一般項目默認是關閉的,這也是有原因的。因為這里的proguard.flags是沒有針對app的配置的,使用默認的混淆,app很有可能就不工作了。

    添加了mk文件修改之後,在Android.mk同級根目錄創建本app自有的proguard.flags。新增內容如下,這里需要注意,網上很多demo,基本分為三部分,一部是保留app基礎功能部分的內容不混淆;2是保持app對外介面,例如get、set、isxx、AIDL、public、native層的介面或者類;3.是第三方jar包或介面。混淆的基本原理就是將上訴類或介面進行統一簡單字母的替換,如果改變了這些對外介面的名字,很有可能被別人使用的時候就找不到對應哦介面

    一些第三方的庫如何不進行混淆,這個根據項目特點,可以自行搜索,比如網路的地圖包什麼的。
    然後是如何驗證和解決混淆過程遇到的問題,因為是對介面名進行替換,如果出現混淆問題的話,log裡面一定會有類似

這個時候只需要對相關介面進行例外(-keep)即可,然後用android-studio,直接打開或者dex2jar進行反解可以看到相關的介面是否被簡單替換。

Ⅳ android 怎麼實現只混淆自己的代碼,而不混淆第3方jar包

1. 新建一個工程會看到項目下邊有這樣proguard-project.txt一個文件,這個對混淆代碼很重要,如果不小心刪掉了,沒關系,從其他地方拷貝一個過來
2. 最重要的就是在proguard-project.txt添加混淆的申明了:
a. 把所有的jar包都申明進來,例如:
-libraryjars libs/apns_1.0.6.jar
-libraryjars libs/armeabi/libBaiMapSDK_v2_3_1.so
-libraryjars libs/armeabi/liblocSDK4.so
-libraryjars libs/mapapi_v2_3_1.jar
-libraryjars libs/core.jar
-libraryjars libs/gesture-imageview.jar
-libraryjars libs/gson-2.0.jar
-libraryjars libs/infogracesound.jar
-libraryjars libs/locSDK_4.0.jar
-libraryjars libs/ormlite-android-4.48.jar
-libraryjars libs/ormlite-core-4.48.jar
-libraryjars libs/universal-image-loader-1.9.0.jar

b. 將你不需要混淆的部分申明進來,因為有些類經過混淆會導致程序編譯不通過,如下:

-keep public class * extends android.app.Fragment
-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 * extends android.support.v4.**
-keep public class com.android.vending.licensing.ILicensingService

--以上都是API里邊的類,最好都要避免混淆

有些很特殊的,例如網路地圖,你需要添加以下申明:

-keep class com..** { *; }
-keep class vi.com.gdi.bgl.android.**{*;}

根據我的經驗,一般model最好避免混淆(model無關緊要,不混淆也沒多大關系)如:

-keep class com.bank.pingan.model.** { *; }
下面在貼上關於Umeng分享統計的避免混淆的申明

-dontwarn android.support.v4.**
-dontwarn org.apache.commons.net.**
-dontwarn com.tencent.**

-keepclasseswithmembernames class * {
native <methods>;
}

-keepclasseswithmembernames class * {
public <init>(android.content.Context, android.util.AttributeSet);
}

-keepclasseswithmembernames class * {
public <init>(android.content.Context, android.util.AttributeSet, int);
}

-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}

-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}

-keepclasseswithmembers class * {
public <init>(android.content.Context);
}

-dontshrink
-dontoptimize
-dontwarn com.google.android.maps.**
-dontwarn android.webkit.WebView
-dontwarn com.umeng.**
-dontwarn com.tencent.weibo.sdk.**
-dontwarn com.facebook.**

-keep enum com.facebook.**
-keepattributes Exceptions,InnerClasses,Signature
-keepattributes *Annotation*
-keepattributes SourceFile,LineNumberTable

-keep public interface com.facebook.**
-keep public interface com.tencent.**
-keep public interface com.umeng.socialize.**
-keep public interface com.umeng.socialize.sensor.**
-keep public interface com.umeng.scrshot.**

-keep public class com.umeng.socialize.* {*;}
-keep public class javax.**
-keep public class android.webkit.**

-keep class com.facebook.**
-keep class com.umeng.scrshot.**
-keep public class com.tencent.** {*;}
-keep class com.umeng.socialize.sensor.**

-keep class com.tencent.mm.sdk.openapi.WXMediaMessage {*;}

-keep class com.tencent.mm.sdk.openapi.** implements com.tencent.mm.sdk.openapi.WXMediaMessage$IMediaObject {*;}

-keep class im.yixin.sdk.api.YXMessage {*;}
-keep class im.yixin.sdk.api.** implements im.yixin.sdk.api.YXMessage$YXMessageData{*;}

-keep public class [your_pkg].R$*{
public static final int *;
}
3.以上工作完成,混淆工作就完成了一大半了,最後需要做的就是在project.properties文件中加上混淆文件申明了,如下
proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
4. OK, 最後一步,打簽名包測試,如果有問題,仔細看下Log也許有得類不能混淆,那麼你得加入到proguard-project.txt文件中
-------以上就是混淆代碼的全過程了

Ⅳ 求教一個問題,命令行編譯Android程序,如何用proguard混淆

針對android 選擇user版本進行編譯的時候,會出現proguard錯誤,我們需要知道的事情

1.proguard是做什麼的,他的作用是將java代碼進行混淆的工具

2.因為proguard是混淆工具,所以android的mk文件也對其支持為兩種方式:

1.指定不需要混淆的native方法與變數的proguard.flags文件如:LOCAL_PROGUARD_FLAG_FILES := proguard.flags

2.制定編譯的工程,不要使用代碼混淆的工具進行代碼混淆如:LOCAL_PROGUARD_ENABLED := disabled

3.不設置,默認使用LOCAL_PROGUARD_ENABLED := full.即將該工程代碼全部混淆

Ⅵ android 混淆

其實不要混淆的主旨就在於混淆會改變方法的名字,類的名字,但是對於外部的一些引用是通過名字找到對應的方法,類,這些可能是通過string找到方法,類,但是string里的欄位是不會進行混淆,所以還是會保留原來的名字,這樣混淆過後通過原來的名字去找混淆後的名字,是肯定找不到,所以就會報出nosuchfileException,(對於gson,反射,jsbridge,第三方庫都是這個原因),至於說枚舉類型,我還暫時沒懂 為什麼,還望共同學習,一起成長。
文章是讀了兩篇博客寫出來,也是自己總結,消化成自己的知識了,若有什麼錯誤的地方,還望指出,相信讀了這兩篇文章之後你也會懂混淆,一個是如何混淆,一個是哪些該混淆,為什麼不能混淆

-keepclasseswithmembernames class * { # 保持native方法不被混淆 native <methods>; }

-keep class * implements Android.os.Parcelable { # 保持Parcelable不被混淆 public static final Android.os.Parcelable$Creator *; }

發布一款應用除了設minifyEnabled為ture,你也應該設置zipAlignEnabled為true,像Google Play強制要求開發者上傳的應用必須是經過zipAlign的,zipAlign可以讓安裝包中的資源按4位元組對齊,這樣可以減少應用在運行時的內存消耗。

原文: http://droidyue.com/blog/2016/07/10/understanding-android-obfuscated-code-by-proguard/

其實不要混淆的主旨就在於混淆會改變方法的名字,類的名字,但是對於外部的一些引用是通過名字找到對應的方法,類,這些可能是通過string找到方法,類,但是string里的欄位是不會進行混淆,所以還是會保留原來的名字,這樣混淆過後通過原來的名字去找混淆後的名字,是肯定找不到,所以就會報出nosuchfileException,(對於gson,反射,jsbridge,第三方庫都是這個原因),至於說枚舉類型,我還暫時沒懂 為什麼,還望共同學習,一起成長。
文章是讀了兩篇博客寫出來,也是自己總結,消化成自己的知識了,若有什麼錯誤的地方,還望指出,相信讀了這兩篇文章之後你也會懂混淆,一個是如何混淆,一個是哪些該混淆,為什麼不能混淆

Ⅶ android集成分享sdk後怎麼代碼混淆

為了保護代碼被反編譯,android引入了混淆代碼的概念
1.設置混淆
在工程下找到project.properties文件
在文件中加入proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt這個是系統的
也可以用自己的混淆文件(這樣就可以配置一些自己的東西),去sdk.dir}/tools/proguard/ 下復制proguard-android.txt文件到本地工程中
然後設置成proguard.config=proguard-android.txt
project.properties文件:
[java] view plain

#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
proguard.config=proguard-android.txt

# Project target.
target=android-17

-injars androidtest.jar【jar包所在地址】
-outjars out【輸出地址】
-libraryjars 'D:\android-sdk-windows\platforms\android-9\android.jar' 【引用的庫的jar,用於解析injars所指定的jar類】
-optimizationpasses 5
-dontusemixedcaseclassnames 【混淆時不會產生形形色色的類名 】
- 【指定不去忽略非公共的庫類。 】
-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 <methods>; 【所有方法不進行混淆】
}
-keep public class com.asqw.android{
public void Start(java.lang.String); 【對該方法不進行混淆】
}
-keepclasseswithmembernames class * { 【保護指定的類和類的成員的名稱,如果所有指定的類成員出席(在壓縮步驟之後)】
native <methods>;
}
-keepclasseswithmembers class * { 【保護指定的類和類的成員,但條件是所有指定的類和類成員是要存在。】
public <init>(android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembers class * {
public <init>(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 *;
}

=====================================常見異常===================================
參考:http://blog.csdn.net/vrix/article/details/7100841

加入第三方jar包之後常出現的幾個異常:
proguard returned with error code 1.See console
情況1:
Proguard returned with error code 1. See console
Error: C:/Documents (系統找不到指定文件)
後來發現是因為將整個工程放到了桌面上,而桌面的目錄是C:/Documents and Settings/Administrator/桌面,在這裡面有空格,而proguard進行發編譯的時候是不允許有空格的
如果換了正確路徑還不好用的話,直接刪除proguard就好了
注意:SDK和程序路徑最好不要有空格符
情況2:
Proguard returned with error code 1. See console
異常:
java.lang.
解決辦法:將proguard.cfg中的"-dontpreverify"改成「-dontoptimize」
參考文章:http://groups.google.com/group/android-developers/browse_thread/thread/eca3b0f5ce6ad00f

我把項目中生成的proguard文件夾(此時文件夾是空的)刪掉,然後再重新運行項目,就OK 了。
情況3:
[2011-10-21 13:22:32 - ZMKSMarket_Build_v1.0] Proguard returned with error code 1. See console

[2011-10-21 13:22:32 - ZMKSMarket_Build_v1.0] java.io.IOException: Can't read [proguard.ClassPathEntry@106082] (No such file or directory)
[2011-10-21 13:22:32 - ZMKSMarket_Build_v1.0]
at proguard.InputReader.readInput(InputReader.java:230)
[2011-10-21 13:22:32 - ZMKSMarket_Build_v1.0]
at proguard.InputReader.readInput(InputReader.java:200)
[2011-10-21 13:22:32 - ZMKSMarket_Build_v1.0]
at proguard.InputReader.readInput(InputReader.java:178)
[2011-10-21 13:22:32 - ZMKSMarket_Build_v1.0]
at proguard.InputReader.execute(InputReader.java:100)
[2011-10-21 13:22:32 - ZMKSMarket_Build_v1.0]
at proguard.ProGuard.readInput(ProGuard.java:195)
[2011-10-21 13:22:32 - ZMKSMarket_Build_v1.0]
at proguard.ProGuard.execute(ProGuard.java:78)
[2011-10-21 13:22:32 - ZMKSMarket_Build_v1.0]
at proguard.ProGuard.main(ProGuard.java:499)
拋出這樣的異常的原因是第三方jar的引用路徑不對,沒有找到這個需要忽略混淆的jar包。

========================官方文檔翻譯========================================

原文
http://developer.android.com/guide/developing/tools/proguard.html

混淆器(ProGuard)
在本文中(In this document)
Enabling ProGuard
Configuring ProGuard
Decoding Obfuscated Stack Traces
Debugging considerations for published applications
參見
ProGuard Manual ?
ProGuard ReTrace Manual ?
混淆器通過刪除從未用過的代碼和使用晦澀名字重命名類、欄位和方法,對代碼進行壓縮,優化和混淆。結果是一個比較小的.apk文件,該文件比較難進行逆向工程。因此,當你的應用程序對安全敏感(要求高),例如當你授權應用程序的時候,混淆器是一種重要的保護手段。
混淆器被集成在android 構建系統中,所以你不必手動調用它。同時混淆器僅在發布模式下進行構建應用程序的時候才會運行起來,所以在調試模式下構建程序時,你不必處理混淆代碼。讓混淆器運行起來是可選擇的,但是推薦選上。
這個文檔描述了怎樣啟用並配置混淆器,以及使用跟蹤(retrace)工具對混淆的堆棧跟蹤信息(stack traces)進行解碼。

啟用混淆器Enabling ProGuard
當你新建了一個Android工程之後,一個proguard.cfg文件會在工程的根目錄下自動創建。這個文件定義了混淆器是怎樣優化和混淆你的代碼的,所以懂得怎樣根據你的需要來定製是非常重要的。預設的配置文件僅覆蓋到了通常情況,所以根據你的需求,很可能需要編輯它。接下來的內容是關於通過定製混淆器配置文件來對混淆器配置。
為了讓啟用混淆器作為Ant或者Eclipse構建過程中一部分,可以在<project_root>/default.properties文件中,設置proguard.config屬性。路徑可以是絕對路徑或者工程根目錄的相對路徑。
如果你讓proguard.cfg文件在預設位置(工程的根目錄),你可以像這樣指定位置:
proguard.config=proguard.cfg

同樣,你可以把該文件放到任意的位置,並指定它的絕對路徑。
proguard.config=/path/to/proguard.cfg

當你在發布模式下,或者通過運行ant release,或者通過使用Eclipse中的Export Wizard構建你的應用程序的時候,構建系統都會自動地去檢查proguard.config屬性是否被設置了。如果被設置了,混淆器在把所有東西打包成.apk文件之前,自動地對應用程序位元組碼進行混淆處理。而在調試模式中構建則不會調用混淆器,因為那樣調試會更加繁重。

運行混淆器之後輸出的文件有:
mp.txt
描述.apk包中所有class文件的內部結構。
mapping.txt

列出了源代碼與混淆後的類,方法和屬性名字之間的映射。這個文件對於在構建之後得到的bug報告是有用的,因為它把混淆的堆棧跟蹤信息反翻譯為源代碼中的類,方法和成員名字。更多信息,查看解碼混淆過的堆棧跟蹤信息。

seeds.txt
列出那些未混淆的類和成員。
usage.txt
列出從.apk中剝離的代碼。
這些文件放在以下目錄中:

注意:每次在發布模式下構建時,這些文件都會被最新的文件覆蓋。所以每次發布程序時候,為了反混淆來自構建時產生的bug報告,請保存這些文件的一個拷貝。對於為什麼要保存這些文件的重要性的更多信息,請查看程序發布調試注意事項。

混淆器配置(proguard config)
某些情況下,proguard.cfg文件的預設配置可以滿足需求了。但是,對於混淆器來說,大多數情況做出正確的分析是困難的,並且它或許會刪除在它看來是無用的,但對於程序來說卻確實需要的代碼。一些例子如下:

一個僅引用於AndroidManifest.xml文件的類。
一個通過JNI調用的方法。
動態引用的屬性和方法。
<project_root>/bin/proguard 當你使用Ant時
<project_root>/proguard 當你使用Eclipse時

解碼混淆過的堆棧跟蹤信息(Decoding Obfuscated Stack Traces)
當混淆代碼並輸出了一個堆棧調試信息時,這些方法名字是混淆過的,雖然可以進行調試,但是調試變得困難。幸運的是,每當混淆器運行時候,它都會輸出到文件<project_root>/bin/proguard/mapping.txt中,該文件包含了從原始類,方法和屬性名字到混淆後名字的映射。
Windows系統中retrace.bat腳本命令或者Linux和Mac OS X系統中retrace.sh腳本命令能把混淆後的堆棧調試信息轉換為可以理解的文件。它被放在<sdk_root>/tools/proguard/目錄下。運行retrace工具的命令語法是:
retrace.bat|retrace.sh [-verbose] mapping.txt [<stacktrace_file>]

例如:
retrace.bat -verbose mapping.txt obfuscated_trace.txt

如果你沒有為<stracktrace_file>指定值,那麼retrace工具從標准輸入讀取。

已發布應用程序的調試注意事項(Debugging considerations for published applications)
保存好每一個已發布給用戶的程序的mapping.txt文件。通過保存發布構建版本的mapping.txt文件拷貝,確保當用戶碰到bug,並把混淆後的堆棧調試跟蹤信息提交給你時,你可以進行調試從而修復問題。程序的mapping.txt文件在每次發布構建時都會被覆蓋,所以你一定要注意保存正確的版本。
例如,假設你已經發布了一個應用程序並在繼續在新的版本中開發添加新的功能。接著你馬上啟動混淆器並創建一個新的發布版本。該操作把mapping.txt文件覆蓋了。一個用戶提交了來自當前發布版本的bug報告,該報告包含了堆棧調試信息。你再也不能對用戶的堆棧信息進行調試了,因為這個對應用戶本機上版本的mapping.txt文件不存在了。其他覆蓋mapping.txt文件的情況還有很多,所以對於每一個可能需要調試的版本,你都要確保有一份拷貝。

閱讀全文

與android混淆native相關的資料

熱點內容
java000 瀏覽:447
華為手機文件夾的字體顏色 瀏覽:632
安卓怎麼換相機 瀏覽:933
華為相片文件夾怎麼刪除重復照片 瀏覽:314
plc編程視頻教程大全 瀏覽:938
直播用哪個app播放背景音樂 瀏覽:850
點歌機系統app在哪裡下載 瀏覽:609
javadate類型轉換string 瀏覽:694
RPG游戲解壓後亂碼 瀏覽:988
無線通信的幾個密鑰演算法 瀏覽:644
王者榮耀app數據修復在哪裡 瀏覽:429
基於單片機飲水機溫度控制系統的設計 瀏覽:455
c中委託被編譯後的結構 瀏覽:152
飛燕app怎麼注銷賬號 瀏覽:895
cad命令縮小 瀏覽:154
linux發展史 瀏覽:629
伺服器選用什麼CPU比較好 瀏覽:334
明星怎麼宣傳安卓 瀏覽:953
8255晶元編程 瀏覽:65
java文件bat運行 瀏覽:747