Androidのapkを作成するときのProGuardの掛け方は書いてる方がたくさんいるんですが、
antビルドの場合にどうやって掛ければいいか分からなかったので、
いろいろ試して成功しました。
結果をメモしておきます。
ローカル設定を反映
まずは、プロジェクトのbuild.xmlを作成します。android update project --path ./
と打って、local.properties、build.xmlなどを作成します。
Build.xmlの編集
次に、build.xmlのターゲットに下のようにタスクを追加します。<javac srcdir="src/" destdir="bin/classes" encoding="utf-8" classpath="${sdk.dir}/platforms/${target}/android.jar" includeAntRuntime="false"/> <target name="production_jar"> <taskdef resource="proguard/ant/task.properties" classpath="${path-to-proguard.jar}"/> <proguard configuration="proguard.cfg"/> </target>
proguard.jarは
android-sdks/tools/proguard/lib/proguard.jar
にあります。
proguard.cfg
proguard.cfgに出力設定を書いていきます。# classファイル -injars bin/classes # 出力先ファイル名 -outjars artifacts/library.jar # ターゲットAndroid向けに変更する -libraryjars /usr/local/java/android-sdk/platforms/android-8/android.jar # 変更したメソッド名のマップ -printmapping bin/proguard.map -keepparameternames -renamesourcefileattribute SourceFile -keepattributes Exceptions,InnerClasses,Signature,Deprecated, SourceFile,LineNumberTable,*Annotation*,EnclosingMethod -keep public class * { public protected *; } -keepclassmembernames class * { java.lang.Class class$(java.lang.String); java.lang.Class class$(java.lang.String, boolean); } -keepclasseswithmembernames class * { native <methods>; } -keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); } -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(); }
ビルド
最後に、
ant production_jarとコマンドを打てばビルドされました。
jarの中身を見ても変数名とか難読化されています。
0 件のコメント:
コメントを投稿