安卓adt 使用proguard打混淆包具體步驟【詳細】

【Bluecoffee原創】轉載請註明出處哦!java

要想打出混淆包,總共分幾步:android

第一步:將安卓項目中的Java代碼導出爲Jar包。apache

導出方式:src下的目錄,右鍵選擇Export,以下圖選擇導出jar包app

輸入圖片說明

next下一步,注意src下面的文件夾要都勾選上,以下圖,ide

輸入圖片說明

finish,導出jar包成功,若是不放心jar包裏面的類是否完整,能夠使用jd-gui工具反編譯來查看。工具

第二步:copy一個一樣的項目(能夠copy到另外一個工做空間),把src下面的java類所有刪掉,把第一步導出jar包放到lib下面,運行一下app,看功能是否正常。若是正常,那麼請進入第三步,若是不正常,請回退到第一步檢查是否有類沒有導出成功。測試

第三步:重頭戲來了,使用proguard混淆第一步導出的jar包。ui

proguard在哪裏呢?請見「Your sdk 路徑\tools\proguard」,sdk中已經有proguard工具了,不須要另外下載。 在proguard\bin下,運行proguardgui.bat,見下圖:google

輸入圖片說明

點擊Load Configuration,load進去一個文件,裏面能夠寫好須要keep的類,下面,我給出一個例子:code

-injars 第一步的jar包.jar

-outjars 導出的jar包.jar

-libraryjars '你的項目路徑\libs\android-support-v4.jar'

-libraryjars '你的jdk路徑\jdk1.6.0_37'

-libraryjars '你的sdk路徑\platforms\android-21'

-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
-optimizationpasses 5
-printmapping mapping.txt
-dontusemixedcaseclassnames
-keepattributes *Annotation*,Signature
-dontpreverify
-verbose
-dontwarn com.alipay.android.phone.mrpc.core**,com.alipay.apmobilesecuritysdk.face**,cn.jpush**,com.lidroid**,com.sinovoice**,com.baidu**,com.android.volley.toolbox**,com.google.gson**,org.apache.http**,com.handmark.pulltorefresh**,com.squareup.picasso**,com.cheweishi.android.entity**


-keep class * extends java.lang.annotation.Annotation {
    <fields>;
    <methods>;
}

-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 * extends android.support.v7.**

-keep class com.alipay.android.phone.mrpc.core.** {
    <fields>;
    <methods>;
}

-keep class com.alipay.apmobilesecuritysdk.face.** {
    <fields>;
    <methods>;
}

-keep class cn.jpush.** {
    <fields>;
    <methods>;
}

-keep class com.lidroid.** {
    <fields>;
    <methods>;
}

# 自定義控件不須要混淆
-keep class com.cheweishi.android.widget.** {
    <fields>;
    <methods>;
}

-keep class com.sinovoice.** {
    <fields>;
    <methods>;
}

-keep class com.baidu.** {
    <fields>;
    <methods>;
}

-keep class vi.com.gdi.bgl.android.** {
    <fields>;
    <methods>;
}

-keep class com.android.volley.toolbox {
    <fields>;
    <methods>;
}

-keep class com.google.gson.** {
    <fields>;
    <methods>;
}

-keep class org.apache.http.** {
    <fields>;
    <methods>;
}

-keep class com.handmark.pulltorefresh.** {
    <fields>;
    <methods>;
}

-keep class com.squareup.picasso.** {
    <fields>;
    <methods>;
}

-keep class com.cheweishi.android.entity.** {
    <fields>;
    <methods>;
}

-keep class com.cheweishi.android.response.BaseResponse

-keep public class com.android.vending.licensing.ILicensingService

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

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

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

# Also keep - Enumerations. Keep the special static methods that are required in
# enumeration classes.
-keepclassmembers enum  * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

# Keep names - Native method names. Keep all native class/method names.
-keepclasseswithmembers,allowshrinking class * {
    native <methods>;
}

漢字路徑請先自行替換,若是文件都更改正確,接下來能夠一路next按鈕就能夠,假若有些地方須要修改,能夠逐個next修改配置,舉個栗子:

輸入圖片說明

在第二個選項卡input、output就能夠修改導入導出的jar路徑,及依賴的類庫路徑,接下來還能夠配置須要keep的路徑,再也不贅述。

最後,來到process標籤頁,點擊Process!,就開始混淆啦,通過一堆log以後,混淆結束。 注意:在log中,Note級別沒有問題,存在warn,error一類的log那麼就是有問題了,請根據錯誤提示,修改配置便可。

第四步:接近成功了!將混淆過導出的jar包放到第二步的copy項目中,不要忘記把原來測試的jar包刪掉。

接下來運行app,看看混淆後的app是否正常工做。在用jd-gui看看混淆事後的jar包可讀性如何,必定看起來很想哭吧,那就對了,大功告成!

相關文章
相關標籤/搜索