【发布时间】:2016-07-11 19:35:44
【问题描述】:
我正在研究 Android Studio 中的“即时运行”功能。但看起来它不适用于proguard。有没有人知道为什么以及如何让它们一起工作?
我的环境:Android Studio 2.0 Beta 4
我的顶级 build.gradle
buildscript {
repositories {
mavenCentral()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.0.0-beta4'
}
}
allprojects {
repositories {
maven { url "http://dl.bintray.com/populov/maven" }
mavenCentral()
jcenter()
}
}
模块的 build.gradle:
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
defaultConfig {
minSdkVersion 17
targetSdkVersion 23
}
buildTypes {
debug {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile 'com.android.support:appcompat-v7:23.1.1'
}
我可以在具有上述设置的 gradle 控制台中看到一些以下“instatn run”任务。运行按钮上会出现一个黄色的雷电。
:TestIR:transformClassesWithInstantRunVerifierForDebug
:TestIR:transformClassesWithInstantRunForDebug
:TestIR:transformClasses_enhancedWithInstant+reloadDexForDebug
:TestIR:generateDebugInstantRunAppInfo
:TestIR:transformClassesWithInstantRunSlicerForDebug
Dexing C:\git\android\TestIR\build\intermediates\transforms\instantRunSlicer\debug\folders\1\5\slice_1 took 328
Dexing C:\git\android\TestIR\build\intermediates\transforms\instantRunSlicer\debug\folders\1\5\slice_0 took 340
Dexing C:\git\android\TestIR\build\intermediates\transforms\instantRunSlicer\debug\folders\1\5\slice_2 took 331
Dexing C:\git\android\TestIR\build\intermediates\transforms\instantRunSlicer\debug\folders\1\5\slice_5 took 321
Dexing C:\git\android\TestIR\build\intermediates\transforms\instantRunSlicer\debug\folders\1\5\slice_3 took 456
但如果我将“minifyEnabled”设置为 true,Gradle 控制台中将不再有“即时运行”任务,黄色的雷电按钮也是如此。
有没有办法让他们一起工作?
【问题讨论】:
-
为什么 proguard 在运行时使用了 run 函数?它应该只为签名的应用程序运行,对吧?
-
我正在考虑做的一件事是创建一个具有
minifyEnabled false的开发人员构建类型,并且仅在开发时使用它在较新的设备上进行测试,然后切换到调试一个 -
@TaylorCourtney 当您的 minsdk 足够低时,您只需运行 proguard 即可满足 dex 限制。除非它在生产中,否则您不需要将其用于混淆,但您需要修剪额外的方法以在旧设备上进行测试
-
我明白了.... 也许让 pro Guard 只能在较低的设备上运行,而不是在较新的设备上运行?或者这就是你已经在做的?
-
@TaylorCourtney,正如 Mike 所说,我将“minifyEnabled”设置为 true 的原因是为了修剪额外的方法。