Я создаю версию выпуска своего приложения, используя ant и proguard. Выпускная версия моего приложения построена успешно, однако единственными частями кода, которые запутываются, являются локальные переменные. Методы и переменные класса сохраняют свои точные имена. Еще больше запутывает тот факт, что файл mapping.txt генерируется каждый раз, когда я строю, и я вижу, что методы и переменные класса сопоставляются с чем-то другим. Однако когда я использую Dex2Jar для деконструкции моего файла .apk, я не вижу ни одного из отображений.
Я недавно обновил ADB до r16. До этого обновления я использовал версию ADB, которая была pre-r14. Используя версию ADB до r14, я успешно запутывал свое приложение в течение года. Я смог убедиться, что эти pre-r14 .apks были полностью запутаны, также разобрав их.
Может кто-нибудь сказать мне, почему имена методов и переменные класса не запутываются? Я включил мои файлы сборки ниже. Хотя после обновления до r16 структура некоторых файлов сборки немного отличается, я, по сути, следую тем же шагам, которые я использовал при использовании ADB до r14, поэтому я не понимаю, почему у меня другие поведение.
proguard.cfg:
-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
-renamesourcefileattribute SourceFile
-keepattributes SourceFile,LineNumberTable
-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 interface com.android.vending.licensing.ILicensingService
-keepclasseswithmembernames class * {
native <methods>;
}
-keepclasseswithmembernames class * {
public <init>(android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembernames class * {
public <init>(android.content.Context, android.util.AttributeSet, int);
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
build.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE project [ <!ENTITY add-proguard-release SYSTEM "add-proguard-release.xml">]>
<project name="MyApp" default="help">
&add-proguard-release;
<property file="local.properties" />
<property file="ant.properties" />
<loadproperties srcFile="project.properties" />
<fail
message="sdk.dir is missing. Make sure to generate local.properties using 'android update project' or to inject it through an env var"
unless="sdk.dir"/>
<!-- Custom Android task to deal with the project target, and import the
proper rules.
This requires ant 1.6.0 or above. -->
<path id="android.antlibs">
<pathelement path="${sdk.dir}/tools/lib/anttasks.jar" />
<pathelement path="${sdk.dir}/tools/lib/sdklib.jar" />
<pathelement path="${sdk.dir}/tools/lib/androidprefs.jar" />
</path>
<taskdef name="setup"
classname="com.android.ant.SetupTask"
classpathref="android.antlibs" />
<import file="${sdk.dir}/tools/ant/build.xml" />