Như tôi biết có một số lớp không nên bị làm xáo trộn và tên của chúng phải được lưu giữ như 'Hoạt động'. Tuy nhiên tôi muốn các lớp khác và các gói bên trong mã của tôi được đổi tên. đây là build.gradle
bên trong thư mục ứng dụng: áp dụng plugin: 'com.android.application'Android: Cấu hình Proguard để làm xáo trộn tên và phương thức của lớp
android {
compileSdkVersion 23
buildToolsVersion "23.0.3"
defaultConfig {
applicationId "apt.eve.good.morning"
minSdkVersion 14
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
testCompile 'junit:junit:4.12'
compile 'com.android.support:support-v4:23.4.0'
compile 'com.android.support:appcompat-v7:23.4.0'
compile 'com.android.support:design:23.4.0'
}
tôi sử dụng cấu hình Proguard này cho ứng dụng của tôi (app\proguard-rules.pro
):
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-useuniqueclassmembernames
-verbose
-keepattributes *Annotation*
-keep public class com.google.vending.licensing.ILicensingService
-keep public class com.android.vending.licensing.ILicensingService
# For native methods, see http://proguard.sourceforge.net/manual/examples.html#native
-keepclasseswithmembernames class * {
native <methods>;
}
# keep setters in Views so that animations can still work.
# see http://proguard.sourceforge.net/manual/examples.html#beans
-keepclassmembers public class * extends android.view.View {
void set*(***);
*** get*();
}
-allowobfuscations class *
# We want to keep methods in Activity that could be used in the XML attribute onClick
-keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
}
# For enumeration classes, see http://proguard.sourceforge.net/manual/examples.html#enumerations
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keepclassmembers class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator CREATOR;
}
-keepclassmembers class **.R$* {
public static <fields>;
}
# The support library contains references to newer platform versions.
# Don't warn about those in case this app is linking against an older
# platform version. We know about them, and they are safe.
-dontwarn android.support.**
# Understand the @Keep support annotation.
-keep class android.support.annotation.Keep
-keep @android.support.annotation.Keep class * {*;}
-keepclasseswithmembers class * {
@android.support.annotation.Keep <methods>;
}
-keepclasseswithmembers class * {
@android.support.annotation.Keep <fields>;
}
-keepclasseswithmembers class * {
@android.support.annotation.Keep <init>(...);
}
Nó làm tối ưu hóa nhưng như Tôi đã kiểm tra bên trong classses.dex tất cả các tên lớp vẫn không thay đổi. Vì vậy, tôi muốn biết những gì tôi bị mất trong tập tin cấu hình của tôi mà không phải là obfuscating tên lớp/phương pháp?
P.S.1 Tôi đã tìm kiếm một số câu hỏi nhưng tôi không thể tưởng tượng điều gì sai ở đây.
P.S.2 Tôi đã định cấu hình đúng studio android và các thay đổi về cấu hình proguard được áp dụng mà không gặp vấn đề gì với tệp .apk được phát hành của tôi.
gửi build gradle của bạn tập tin – petey
Nơi nào bạn kiểm tra kết quả của obfuscation? Tôi không chắc chắn 100%, nhưng tôi nghĩ rằng trong dự án của tôi, các tệp '.dex' bị xáo trộn nằm trong' build/intermediates/transforms/dex/** ', bất kỳ lớp/dex nào khác trong' build/** 'trông giống như đầu ra của bước xây dựng trước khi obfuscation. Cuối cùng, kết quả '.apk' /' .aar' sẽ bị làm xáo trộn, vì vậy nếu bạn giải nén cái đó, và các lớp không bị xáo trộn, thì cái gì đó không hoạt động như mong đợi. – Ped7g
@ Ped7g Tôi sử dụng dex2jar để chuyển đổi dex bên trong apk của tôi thành tệp jar. Sau đó, tôi sử dụng [jd-gui] (http://jd.benow.ca/#jd-gui-overview) để dịch ngược tệp jar và khi tôi kiểm tra không có tên obfuscation bên trong mã của tôi. tất cả các lớp và các gói vẫn có cùng tên. – VSB