Proguard混淆代码(1)
【意義】混淆代碼,可以加大別人反編譯的難度,從而最大化的保護自己的代碼安全。
【場景】我寫了一個發(fā)短信的程序,回調給游戲一個發(fā)短信是否成功的參數(shù),如果成功,游戲就給用戶加道具。本意:只想暴露給游戲 doPay()接口,但不想讓別人知道我內部的代碼及發(fā)送短信的內容,所以我就要混淆我的代碼,只保留doPay()接口不被混淆~
工程目錄結構:
1 分析:
PaymentForSms.java? 中,有 doPay方法?
public static void doPay(Context context,String uid,String productName,String productPrice,SmsResultCallback callback)
2?
具體實現(xiàn):
準備: Eclipse ,Ant包(網(wǎng)上隨便一搜,一大堆,類似java jdk安裝方法),android sdk自身帶的 proguard.jar工具 + build.xml + progard.cfg
實現(xiàn):
接下來,重點就是 build.xml 和 progard.cfg的編寫了。。。代碼中,有詳細注釋。如果不明白的,可以?百度一下,就非常清晰了...
?
build.xml
build.xml<?xml version="1.0"?> <!-- 默認啟動執(zhí)行targetB --> <projectname="targetPro"default="targetB" ><!-- 全局變量 --><!-- android-sdk 的路徑 --><propertyname="android-sdk"value="D:\android-sdk-4.2" /><!-- android-版本 2.2 --><propertyname="android-jar"value="${android-sdk}/platforms/android-8/android.jar" /><!-- 任務組1 打印了一句話,沒作用--><target name="targetA" ><echo message="Java Version: ${parent.version}" /></target><!-- 任務組 2 先檢查targetA執(zhí)行與否,如果沒執(zhí)行,則先執(zhí)行targetA--><targetname="targetB"depends="targetA"unless="philander" ><echo message="The base dir is: ${basedir}" /><!-- 建立路徑,放.class --><mkdir dir="E:/SDK_Test/build/classes" /><!-- <mkdir dir="E:/SDK_SMS/build/gen" /> --><!-- 用到的Android編譯庫 android.jar --><path id="project.libs" ><fileset dir="${android-sdk}/tools/support" ><include name="*.jar" /></fileset><!-- 可以寫多個庫 --></path><!-- 編譯,用到了 android.jar --><javacbootclasspath="${android-jar}"destdir="E:/SDK_Test/build/classes"encoding="GBK"includeantruntime="on" ><!-- 需要編譯的.java文件路徑 --><src path=".\src" /><!-- 用到的編譯jar包 如android.jar --><classpath refid="project.libs" /></javac><!-- 打jar包 source_sdk.jar是未混淆的代碼 --><jarbasedir="E:/SDK_Test/build/classes"destfile="source_sdk.jar" ></jar><echo>混淆代碼 ... </echo><jar basedir="E:/SDK_Test/build/classes" destfile="temp.jar" /> <!-- temp.jar 為在根目錄下 生成的,沒混淆 jar包 --><java jar="D:\android-sdk-4.2\tools\proguard\lib\proguard.jar" fork="true" failonerror="true"><jvmarg value="-Dmaximum.inlined.code.length=32" /> <arg value="@proguard.cfg"></arg></java><!-- 刪除多余的 .class 和 jar包 --><delete dir="E:/SDK_SMS/build/classes"/> <delete dir="E:/SDK_Test"/><delete file="temp.jar" /><!-- 后續(xù)自己定義操作 --><!-- <delete file="temp.jar" /><delete dir="E:/SDK_SMS/build/classes"/> <mkdir dir="E:/SDK_SMS/build/classes"/><unzip src="http://m.cnblogs.com/160574/optimized.jar" rel="nofollow"/> <delete file="optimized.jar" /><jarbasedir="E:/SDK_SMS/build/classes"destfile="SDK.jar" ></jar><delete dir="E:\SDK_SMS\build" /> --></target></project>proguard.cfg #jar包所在地址 -injars temp.jar #jar包輸出地址 -outjars proguard_sdk.jar #引用的庫的jar,用于解析injars所指定的jar類 -libraryjars D:/android-sdk-4.2/tools/support/annotations.jar -libraryjars libs/android-support-v4.jar -libraryjars D:/android-sdk-4.2/platforms/android-8/android.jar-optimizationpasses 7 #混淆時不會產(chǎn)生形形色色的類名 -dontusemixedcaseclassnames #指定不去忽略非公共的庫類 -dontskipnonpubliclibraryclasses-verbose -dontoptimize #不預校驗 -dontpreverify #優(yōu)化 -optimizations !code/simplification/arithmetic,!field/*,!class/merging/* #檢查引用是否正確,如果在-libraryjars中定義了,無需在次聲明 -dontwarn android.net.http.**#取消打印日志 -assumenosideeffects class android.util.Log {public static *** d(...);public static *** v(...);public static *** i(...); }#不需要混淆的類 1、暴露的接口 2、自定義的Callback 3、用到第三方庫的時候 -keep public class com.rekoo.listener.SmsResultCallback {*;} -keep public class com.rekoo.single.sms.PaymentForSms {*;}-printmapping proguard.map
?
混淆代碼,就比較簡單了~ build.xml右鍵-Run as - Ant build
刷新工程,工程目錄下面,就生成了 proguard_sdk.jar 混淆jar包了。。打開看一下,就ok了。。。如有問題,請留言
?
轉載于:https://www.cnblogs.com/codeAnimal/p/4104321.html
總結
以上是生活随笔為你收集整理的Proguard混淆代码(1)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 马哥4-1
- 下一篇: cxGrid导出Excel货币符号问题