无法在Android Studio中切换到调试版本变体

43

我已经切换到发布版本并配置了签名,现在当我尝试从下拉菜单中检查调试版本时,它立即切换回发布版本。因此,我无法再以调试模式运行我的应用程序。

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
apply plugin: 'realm-android'

android {
    signingConfigs {
        config {
            ...
        }
    }

    compileSdkVersion rootProject.compileSdkVersion
    buildToolsVersion rootProject.buildToolsVersion

    defaultConfig {
        applicationId "com.kost.foo"
        minSdkVersion rootProject.minSdkVersion
        targetSdkVersion rootProject.targetSdkVersion
        versionCode 2
        versionName "1.1"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        ndk {
            abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
        }
        externalNativeBuild {
            cmake {
               ...
            }
        }
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            debuggable true
            signingConfig signingConfigs.config
        }
    }

    sourceSets {
        main.java.srcDirs += 'src/main/kotlin'
        main {
            jniLibs.srcDirs = ['src/main/jni']
        }
    }

    externalNativeBuild {
        cmake {
            path 'src/main/jni/CMakeLists.txt'
        }
    }
}

kapt {
    generateStubs = true
}

repositories {
    maven { url 'https://github.com/linchaolong/stetho-realm/raw/master/maven-repo' }
    mavenCentral()

}
我已经尝试将build.gradle所有更改还原到配置之前的状态,但没有成功。 您有什么解决这个问题的想法吗?

2
我不能说我已经解决了它,因为我仍然不知道问题的原因。但我找到的最快的解决方法是将项目推送到 git(在我的情况下是 bitbucket),并从版本控制中检出一个新项目。 - AlexKost
你为什么在发布类型中设置 debuggable true - IgorGanapolsky
@Igor Ganapolsky 我只是在尝试不同的标志,以便获得更多信息和洞察力,了解正在发生什么。之后我将其删除了。 - AlexKost
@AlexKost,这个问题没有被接受的答案吗? - shizhen
@shizhen 正如我在上面的评论中所述,我已经成功解决了这个问题。之后我再也没有遇到过同样的问题,因此无法检查其他解决方案。其中一些可能提供更好的解决方案。最受欢迎的答案似乎已经过时了。 - AlexKost
显示剩余5条评论
17个回答

32

我曾经遇到类似的问题,构建菜单中的大部分项目都是灰色的。 灰色的

'Sync project with Gradle files' 无效。

我在 Android Studio (v 3.1.2) 的左下方发现了一个名为“Build Variants”的切换按钮,并通过它终于能够选择所需的变体。

从这里选择变体

也许这对你也有用。


14

只需剪切 ".idea" 文件夹并粘贴到项目根目录外部(如果需要备份)。这些文件将自动重新生成。打开项目时,它会询问是否将模块(应用程序)添加到您的项目中。您可以忽略此选项。

它会将默认构建变体设置为 "debug"。 您可以在左上角看到构建变体选项卡,或将鼠标悬停在左下方的 "Monitor" 符号上以获取构建变体选项。


这是在Android Studio 3.1.2中对我有效的解决方案。 - rpattabi
很高兴知道它对你有帮助。 :) - deva11
对我也起作用了。只需删除.idea文件夹并通过阅读build.gradle重新创建工作区。 - Arthur Melo
1
我需要按照这里描述的步骤,将项目删除并重新导入:https://dev59.com/L14b5IYBdhLWcg3wzUcp#45950059 - Braden Holt
由于某些原因,删除.idea文件夹和invalidate cache and restart并没有起作用。只有删除它并重新启动才有效。 - hushed_voice

14

也许你已经找到了解决方案,但以防万一,我在此提供我的解决方案。


针对 Android Studio 2.x:

可能是因为你使用以下方式编译依赖项目:

compile project('module_a')

上面的设置将强制编译您项目的发布版本模块。只需将其更改为以下设置:

releaseCompile project(path: ':module_a', configuration: 'release')
debugCompile project(path: ':module_a', configuration: 'debug')

针对 Android Studio 3.x

对于“模块项目”,您无需明确指定构建变体。只需使用:

implementation project(':library') 

将会自动帮助选择正确的构建变体。

以下是详细说明:https://developer.android.com/studio/build/?utm_source=android-studio#variant_aware


升级至Android Studio 3.x(从2.x)

删除项目根目录下的.idea文件夹,然后重新启动Android Studio。

以下是GUI截图:

enter image description here

希望对您有所帮助!


1
这仅适用于旧版本的Gradle:链接,请参考@rockefelox发布的新版本。 - Madura Anushanga
自从Android Studio 3.0版本以后,所有的xxxCompile闭包都改为xxxImplementation。 - shizhen
1
对于Android Studio 3.1.2,您不需要显式指定“模块项目”的构建变体。只需使用implementation project(':library')即可自动帮助选择正确的构建变体。这里有一个详细的解释https://developer.android.com/studio/build/gradle-plugin-3-0-0-migration?utm_source=android-studio#variant_aware。 - shizhen

11

我遇到了同样的问题。解决方法是关闭Android Studio,删除生成的文件和文件夹:.gradle.ideaapp/.externalNativeBuildapp/buildbuildapp/app.imlProjectName.imllocal.properties,然后重新启动Android Studio,并允许它从头开始重新生成所有这些文件。


2
只需要删除 rm -rf ./.gradle ./app/.gradle .idea/caches/ - Afilu
你节省了我的时间..非常感谢 @andrew - Muhamed El-Banna

6

我曾经遇到同样的问题,解决方法是创建一个新的临时构建类型。选择“构建类型”并添加一个新的构建类型。同步后,您可以选择新的构建类型,然后恢复原始的Debug构建类型。


是唯一对我有效的解决方案,Android Studio 3.4.2。 - ykonda
在Android Studio中,这些类型的解决方案总是最好的。 - Geraldo Neto

2
我遇到了类似的问题。我的模块级build.gradle反映了相应的“debug”和“release”配置。在构建和签署我的应用程序的发布版本之前,我能够成功地在模拟器和设备(LG)上运行我的应用程序。在构建和签署发布版本并尝试在我的手机和设备上运行已签名的APK后,我收到了一个错误PM Session 'mobile': Error Launching activity....Error while Launching activity。所以我开始追溯我的步骤,并意识到在部署签名发布变体之前,我打开了运行/调试配置对话框enter image description here并错误地选择了来自应用程序包的APK值从安装类别下的部署属性中enter image description here
我完整地签署了我的APK,而不是通过Bundle签署。因此,所选的选项试图部署一个从未生成的无效应用程序包,即使它是针对正确的构建变体。

2

打开模块设置(点击F4)。

进入构建类型并通过点击加号(+)创建一个新的构建。

将其命名为任何名称,例如“演示”。

复制所有调试构建的数据。

现在,当您打开构建变体时,您将能够切换到Debug和Demo。


1
对我而言,我无法切换到我们的“devDebug”变体,但我可以切换到另一个变体,比如“devRelease”,然后再切换到“devDebug”。所以先尝试切换到另一个变体。

1
对我而言,这是一个与 Gradle 版本有关的问题。请确保插件版本和所需的 Gradle 版本相匹配,正如此处所定义的那样。

https://developer.android.com/studio/releases/gradle-plugin

您可以在以下位置找到正在使用的Gradle版本:

文件 -> 项目结构... -> 项目


我在更新Gradle版本和其插件版本后得到了解决方案。 - Farmer

1

我尝试了上述所有方法,但都没有效果。最终因为其他原因偶然发现了“文件”>“无效缓存/重启...”,并发现它对我有用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接