【问题标题】:Instant Run doesn't work with proguardInstant Run 不适用于 proguard
【发布时间】: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 的原因是为了修剪额外的方法。

标签: android proguard


【解决方案1】:

根据this官方Android开发者页面,Android Studio在使用Instant Run时禁用ProGuard。

【讨论】:

    【解决方案2】:

    1.转到'运行/调试配置'删除你的android应用配置

    2.重新创建 android 应用程序配置

    3.转到杂项选项卡,取消选中“启动活动前强制停止运行应用程序

    【讨论】:

    • 使用minifyEnabled true,您甚至看不到带有闪电的运行按钮,可以立即运行。我能够让它真正出现的唯一方法是关闭 proguard,除非有更多的步骤丢失
    猜你喜欢
    • 2016-07-06
    • 2019-04-03
    • 1970-01-01
    • 2019-07-11
    • 2021-04-26
    • 1970-01-01
    • 2014-05-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多