android混淆打包


轉載地址:http://blog.csdn.net/wangbofei/article/details/8266553

參考博客地址:

http://hubingforever.blog.163.com/blog/static/171040579201342982553107/

http://blog.csdn.net/wotoumingzxy/article/details/8279646

http://www.cnblogs.com/sunzn/archive/2013/03/06/2946952.html

http://blog.csdn.net/atrueman123/article/details/6281658

一、理論知識  

ProGuard 是一款免費的Java類文件壓縮器、優化器和混淆器。它能發現並刪除無用類、字段(field)、方法和屬性值(attribute)。它也能優化字節碼 並刪除無用的指令。最后,它使用簡單無意義的名字來重命名你的類名、字段名和方法名。經過以上操作的jar文件會變得更小,並很難進行逆向工程。
二、基本使用

  在Android應用程序也可以使用

ProGuard來進行混洗打包,大大的優化Apk包的大小。但是注意 ProGuard對文件路徑的名名很有講究,不支持括號,也不支持空格 在混淆過后,可以在工程目錄的 proguard中的 mapping.txt 看到混淆后的類名,方法名,變量名和 混淆前的類名,方法名,變量名。

 在使用Eclipse新建一個工程,都會在工程目錄下生產配置project.properties和proguard-project.tx

# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt

# Project target.
target=android-10
project.properties用於配置Android工程的一些屬性,#號的話表示當前行是注釋,這里的 proguard.config 就用於指定 ProGuard的 混淆配置文件,並對使用 release 方式打包應用程序時開啟 代碼混淆 功能。對於是否是 使用release方式打包,和 AndroidManifest.xml 中application的android:debuggable屬性有很多關系。如果該值為 android:debuggable=" true " ,那么最終就是 debug方式打包。最明智的方式就是在 AndroidManifest.xml並不顯示的指定它,而是是打包工具在打包時來決定它最終的值。對於ant就是 ant  release ant  debug。 而對於直接在Eclipse中使用 run debgu 來打包的話就是debug,使用export的話就是 release.
proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
這里的話指定了混淆的基本配置文件 proguard-android.txt,和 混淆的個性化配置文件 proguard-project.txt。這里 proguard-project.txt文件用於對前面的 基本的混淆配置文件 proguard-android.txt的配置進行override和添加。

------------------------------------------------------------------------------------------------------------------------------------------

下面是混淆打包第三方jar包的處理:

在project.properties里加上   proguard.config=proguard.cfg

proguard.cfg 配置如下:

-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

#忽略警告 也可以用-ignorewarnings
-dontwarn

#聲明第三方jar包,不用管第三方jar包中的.so文件(如果有)
-libraryjars libs/baidumapapi.jar
-libraryjars libs/tencent_openapi.jar
-libraryjars libs/httpmime-4.1.3.jar
-libraryjars libs/weibo.sdk.android.sso.jar
-libraryjars libs/android-support-v4.jar

-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

-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 *;
}

#不混淆第三方jar包中的類
-keep class com.baidu.mapapi.** {*;}
-keep class com.tencent.tauth.** {*;}
-keep class org.apache.http.entity.mime.** {*;}
-keep class android.support.v4.** {*;}
-keep class android.net.http.** {*;}
-keep class com.weibo.sdk.android.** {*;}
-keep class com.sina.sso.** {*;}

說明一下,第三方jar包中如果有.so文件,不用去理會,引入的第三方jar文件不要混淆,否則可能會報異常


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM