Android Studio 中的 ProGuard 提供了非常弱的混淆。
ProGuard in Android Studio provide very weak obfuscation.
在我的代码中应用混淆器后,它的可读性仍然很好。 Classes 和包未重命名。 Class 个变量,这就是重命名的所有内容。
Android Studio 2.2.3。
build:gradle:2.2.3
build.gradle
apply plugin: 'com.android.application'
android {
compileSdkVersion 24
buildToolsVersion "25.0.1"
defaultConfig {
applicationId "com.mypackagename"
minSdkVersion 19
targetSdkVersion 24
versionCode 3
versionName "1.0"
vectorDrawables.useSupportLibrary = true
}
buildTypes {
release {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
dexOptions {
dexInProcess = true
}
lintOptions {
abortOnError true
checkReleaseBuilds true
}
}
ext {
supportLibVersion = '25.0.1'
playServisesVersion = '10.0.0'
}
repositories {
maven { url "https://jitpack.io" }
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.github.PhilJay:MPAndroidChart:v2.2.5'
compile 'org.greenrobot:eventbus:3.0.0'
compile 'com.wdullaer:materialdatetimepicker:3.0.0'
compile 'com.aurelhubert:ahbottomnavigation:2.0.1'
compile "com.android.support:appcompat-v7:${supportLibVersion}"
compile "com.android.support:cardview-v7:${supportLibVersion}"
compile "com.android.support:design:${supportLibVersion}"
compile "com.google.android.gms:play-services-analytics:${playServisesVersion}"
compile "com.google.android.gms:play-services-drive:${playServisesVersion}"
compile "com.google.firebase:firebase-ads:${playServisesVersion}"
compile "com.google.firebase:firebase-core:${playServisesVersion}"
compile 'com.anjlab.android.iab.v3:library:1.0.34'
compile 'com.github.paolorotolo:appintro:4.1.0'
compile 'net.danlew:android.joda:2.9.5.1'
}
apply plugin: 'com.google.gms.google-services'
proguard-rules.pro
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in C:.....proguard/proguard-android.txt
# You can edit the include path and order by changing the proguardFiles
# directive in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# Add any project specific keep options here:
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
-dontwarn com.github.mikephil.charting.**
-keep class android.support.v7.** { *; }
-keep class android.support.graphics.drawable.** { *; }
正在查看我的发布 apk
我看到您正在使用库 AppIntro
。这个库有一个问题,库的 proguard 规则保留了项目中的所有 类。库的 proguard 规则与本地规则合并,因此在最终构建中所有 类 都被保留并且不会被混淆。
这个问题已经在4.2中修复,但是这个版本还没有在Maven Central上发布。同时,您必须在本地克隆库并在 gradle 中手动导入它。
步骤:
- 通过 Github 在本地下载或克隆库(有一个绿色的
Clone or Download
按钮)
- 在项目的根目录中创建一个新文件夹
libs
- 在
libs
文件夹中创建一个新文件夹 AppIntro
- 将克隆项目的
library
文件夹中的内容放入我们在步骤 3 中创建的 AppIntro
文件夹中
- 将
include ':libs:AppIntro'
添加到您的 settings.gradle
- 在你的
build.gradle
中用 compile project(':libs:AppIntro')
替换 compile 'com.github.paolorotolo:appintro:4.1.0'
现在proguard应该可以正常工作了!
在我的代码中应用混淆器后,它的可读性仍然很好。 Classes 和包未重命名。 Class 个变量,这就是重命名的所有内容。 Android Studio 2.2.3。 build:gradle:2.2.3
build.gradle
apply plugin: 'com.android.application'
android {
compileSdkVersion 24
buildToolsVersion "25.0.1"
defaultConfig {
applicationId "com.mypackagename"
minSdkVersion 19
targetSdkVersion 24
versionCode 3
versionName "1.0"
vectorDrawables.useSupportLibrary = true
}
buildTypes {
release {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
dexOptions {
dexInProcess = true
}
lintOptions {
abortOnError true
checkReleaseBuilds true
}
}
ext {
supportLibVersion = '25.0.1'
playServisesVersion = '10.0.0'
}
repositories {
maven { url "https://jitpack.io" }
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.github.PhilJay:MPAndroidChart:v2.2.5'
compile 'org.greenrobot:eventbus:3.0.0'
compile 'com.wdullaer:materialdatetimepicker:3.0.0'
compile 'com.aurelhubert:ahbottomnavigation:2.0.1'
compile "com.android.support:appcompat-v7:${supportLibVersion}"
compile "com.android.support:cardview-v7:${supportLibVersion}"
compile "com.android.support:design:${supportLibVersion}"
compile "com.google.android.gms:play-services-analytics:${playServisesVersion}"
compile "com.google.android.gms:play-services-drive:${playServisesVersion}"
compile "com.google.firebase:firebase-ads:${playServisesVersion}"
compile "com.google.firebase:firebase-core:${playServisesVersion}"
compile 'com.anjlab.android.iab.v3:library:1.0.34'
compile 'com.github.paolorotolo:appintro:4.1.0'
compile 'net.danlew:android.joda:2.9.5.1'
}
apply plugin: 'com.google.gms.google-services'
proguard-rules.pro
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in C:.....proguard/proguard-android.txt
# You can edit the include path and order by changing the proguardFiles
# directive in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# Add any project specific keep options here:
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
-dontwarn com.github.mikephil.charting.**
-keep class android.support.v7.** { *; }
-keep class android.support.graphics.drawable.** { *; }
正在查看我的发布 apk
我看到您正在使用库 AppIntro
。这个库有一个问题,库的 proguard 规则保留了项目中的所有 类。库的 proguard 规则与本地规则合并,因此在最终构建中所有 类 都被保留并且不会被混淆。
这个问题已经在4.2中修复,但是这个版本还没有在Maven Central上发布。同时,您必须在本地克隆库并在 gradle 中手动导入它。
步骤:
- 通过 Github 在本地下载或克隆库(有一个绿色的
Clone or Download
按钮) - 在项目的根目录中创建一个新文件夹
libs
- 在
libs
文件夹中创建一个新文件夹AppIntro
- 将克隆项目的
library
文件夹中的内容放入我们在步骤 3 中创建的AppIntro
文件夹中 - 将
include ':libs:AppIntro'
添加到您的settings.gradle
- 在你的
build.gradle
中用
compile project(':libs:AppIntro')
替换 compile 'com.github.paolorotolo:appintro:4.1.0'
现在proguard应该可以正常工作了!