<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    L遷客

    技術博客
    隨筆 - 1, 文章 - 12, 評論 - 1, 引用 - 0
    數據加載中……

    Android代碼混淆的實踐

    Android代碼混淆的實踐

     

    1.    基本配置          

    eclipse下建立android工程,就會生成proguard.cfgproject.properties,在后面的文件追加proguard.config=proguard.cfg即可讓前面的配置文件在export時生效。默認的那個文件有一些內容,這里給一個更通用點的。

     

    ##—————Begin: proguard configuration common for all Android apps ———-

    -optimizationpasses 5

    -dontusemixedcaseclassnames

    -dontskipnonpubliclibraryclasses

    -dontskipnonpubliclibraryclassmembers

    -dontpreverify

    -verbose

    -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

    -keepattributes *Annotation*

    -renamesourcefileattribute SourceFile

    -keepattributes SourceFile,LineNumberTable

     

    # 以下兩個命令配合讓類的路徑給刪除了

    -allowaccessmodification

    -repackageclasses ”

     

    # 記錄生成的日志數據,在proguard目錄下

    -dump class_files.txt

    -printseeds seeds.txt

    -printusage unused.txt

    -printmapping mapping.txt

     

    # 異常都可以忽略就打開

    #-dontwarn

     

    -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

    -dontnote com.android.vending.licensing.ILicensingService

     

    -keepnames class * implements java.io.Serializable

     

    # Explicitly preserve all serialization members. The Serializable interface

    # is only a marker interface, so it wouldn’t save them.

    -keepclassmembers class * implements java.io.Serializable {

    static final long serialVersionUID;

    private static final java.io.ObjectStreamField[] serialPersistentFields;

    private void writeObject(java.io.ObjectOutputStream);

    private void readObject(java.io.ObjectInputStream);

    java.lang.Object writeReplace();

    java.lang.Object readResolve();

    }

     

    # Preserve all native method names and the names of their classes.

    -keepclasseswithmembernames class * {

    native ;

    }

     

    -keepclasseswithmembernames class * {

    public (android.content.Context, android.util.AttributeSet);

    }

     

    -keepclasseswithmembernames class * {

    public (android.content.Context, android.util.AttributeSet, int);

    }

     

    # Preserve static fields of inner classes of R classes that might be accessed

    # through introspection.

    -keepclassmembers class **.R$* {

    public static ;

    }

     

    # Preserve the special static methods that are required in all enumeration classes.

    -keepclassmembers enum * {

    public static **[] values();

    public static ** valueOf(java.lang.String);

    }

     

    -keep class * implements android.os.Parcelable {

    public static final android.os.Parcelable$Creator *;

    }

     

    # 如果你的工程是對外提供方法調用就打開

    #-keep public class * {

    # public protected *;

    #}

     

    ##—————End: proguard configuration common for all Android apps ———-

     

    2.解決export打包的報錯          

    這個時候export提示“conversion to Dalvik format failed with error 1”錯誤,網上說法有好多種,最后我還是把proguard4.4升級到4.8就解決了。官方地址是http://proguard.sourceforge.net。上面的配置文件參數可以在這里查閱。升級辦法很簡單,就是把android sdk目錄下的tool/proguard目錄覆蓋一下即可。

     

    3. 打包出來的程序如何調試 

    一旦打包出來,就不能用eclipselogcat去看了,這里可以用android sdkddms.battool來看,一用就發現和logcat其實還是一個東西,就是多了個設備的選擇。

    4. 使用 gson 需要的配置

    Gson用到了泛型就會有報錯,這個真給郁悶了半天,提示“Missing type parameter”。最后找到一個資料給了一個解決辦法,參考:http://stackoverflow.com/questio ... sing-type-parameter。
         
    另外我又用到了JsonObject,提交的Object里面的members居然被改成了a。所以上面給的東西還不夠,還要加上用到自己拼接的

    JsonObject-keep class com.google.gson.JsonObject { *; } 

           我個人建議減少這些依賴包混淆帶來的麻煩,干脆都全部保留不混淆。例如

    -keep class com.badlogic.** { *; }-keep class * implements com.badlogic.gdx.utils.Json*-keep class com.google.** { *; }        

     

    5. 使用libgdx需要的配置

    參考http://code.google.com/p/libgdx-users/wiki/Ant
           

    6. 驗證打包效果

    我是利用了apktool的反編譯工具,把打包文件又解壓了看了一下,如果包路徑、類名、變量名、方法名這些變化和你期望一致,那就OK了。命令:
    apktool.bat d xxx.apk destdir        

     

    總結

    這個東西用起來也不是很簡單,特別是你程序用到的高級特性多,就更容易出問題。另外proguard的參數看起來確實也有點不好理解,打包過程慢,測試也比較浪費時間。東西雖好,但真不是那么容易上手。

    posted on 2013-02-24 16:47 L遷客 閱讀(79) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 黄网站免费在线观看| 国产亚洲精品欧洲在线观看| sihu国产精品永久免费| 日本一区免费电影| 亚洲中文字幕一二三四区| 国产免费的野战视频| 亚洲精品欧洲精品| 久久精品国产免费观看三人同眠| 亚洲日韩区在线电影| 67pao强力打造高清免费| 亚洲情a成黄在线观看动漫尤物| 国产婷婷成人久久Av免费高清 | 久久久久久一品道精品免费看 | 四虎免费在线观看| 亚洲欧美综合精品成人导航| 日本人护士免费xxxx视频| 日韩欧美亚洲国产精品字幕久久久| 日本免费福利视频| 欧亚一级毛片免费看| 久久久久亚洲精品天堂久久久久久| 中文字幕的电影免费网站| 亚洲gv猛男gv无码男同短文| 13一14周岁毛片免费| 亚洲中文无码av永久| 在线观着免费观看国产黄| 全黄A免费一级毛片| 亚洲av午夜福利精品一区人妖| 日本免费在线观看| 亚洲一卡二卡三卡| 免费人妻av无码专区| 中文字幕手机在线免费看电影| 在线观看亚洲一区二区| 成年女人男人免费视频播放 | 日韩黄色免费观看| 亚洲精品黄色视频在线观看免费资源| 国产午夜亚洲精品理论片不卡| 麻豆精品成人免费国产片| 亚洲日韩中文字幕| 免费中文字幕一级毛片| 国产女高清在线看免费观看| 国产精品亚洲综合天堂夜夜|