关于android:原因:buildOutput.apkData不能为null

Cause: buildOutput.apkData must not be null

当我尝试在手机的模拟器o中运行" app"时,使用Kotlin的android应用程序抛出此异常。 当我构建项目时,它运行良好,没有错误。

我在用:

  • SDK 28(Android 9.0(Pie))
  • 摇篮5.1.1
  • Gradle插件3.5.0-alpha03
  • Kotlin 1.3.10
  • Java 1.8.0_151
  • OSX 10.13.2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    org.gradle.internal.exceptions.LocationAwareException: buildOutput.apkData must not be null
        at org.gradle.initialization.exception.DefaultExceptionAnalyser.transform(DefaultExceptionAnalyser.java:99)
        at org.gradle.initialization.exception.DefaultExceptionAnalyser.collectFailures(DefaultExceptionAnalyser.java:65)
        at org.gradle.initialization.exception.MultipleBuildFailuresExceptionAnalyser.transform(MultipleBuildFailuresExceptionAnalyser.java:39)
        at org.gradle.initialization.exception.StackTraceSanitizingExceptionAnalyser.transform(StackTraceSanitizingExceptionAnalyser.java:29)
        at org.gradle.initialization.DefaultGradleLauncher.finishBuild(DefaultGradleLauncher.java:194)
        at org.gradle.initialization.DefaultGradleLauncher.finishBuild(DefaultGradleLauncher.java:141)
        ...
    Caused by: java.lang.IllegalStateException: buildOutput.apkData must not be null
        at com.android.build.gradle.internal.ide.EarlySyncBuildOutput$Companion$load$2.invoke(EarlySyncBuildOutput.kt:103)
        at com.android.build.gradle.internal.ide.EarlySyncBuildOutput$Companion$load$2.invoke(EarlySyncBuildOutput.kt:67)
        at kotlin.sequences.TransformingSequence$iterator$1.next(Sequences.kt:174)
        at kotlin.sequences.SequencesKt___SequencesKt.toCollection(_Sequences.kt:691)
        at kotlin.sequences.SequencesKt___SequencesKt.toMutableList(_Sequences.kt:721)
        at kotlin.sequences.SequencesKt___SequencesKt.toList(_Sequences.kt:712)
        ...


点击Build-> Clean Project

然后Build-> Make Project

在gradle 3.5.0-alpha3,-alpha5和3.4.0上测试(项目gradle)

1
classpath 'com.android.tools.build:gradle:3.5.0-alpha03'


For Android Studio 3.5 & 3.6 Update. (APK signed issue)

步骤1:我已经通过修改目标文件夹位置解决了此问题。

之前

1
c:\\user\\folder\\project\\app

1
c:\\user\\folder\\project\\apk

> **适用于Android Studio`3.4`更新。**

步骤1:更新Android Studio 3.4之后,您需要在应用程序级别build.gradle中添加模块或库中使用的所有依赖项。

步骤2:清理项目(构建>清理项目)

步骤3:重建项目("构建">"重建项目")

现在,您的项目将完美编译。


对于Android Studio 3.5 | 3.6

调试构建完成,没有任何错误。在创建签名的.apk时会导致相同的错误

1
buildOutput.apkData must not be null

我发现的简单解决方案是。在导航到下一个屏幕时,在输入签名凭据后的apk签名过程中,它将询问目标文件夹,只需更改默认路径即可。

假设当前目标路径为

c:\\user\\folder\\project\\app

更改为

c:\\user\\folder\\project\\

然后它将成功生成签名的apk。

Android studio destination folder screenshot


尝试为我的发行版"生成签名的APK"时,我也收到此错误。
我尝试了上述所有方法,但不幸的是,没有一种方法对我有用。

有效的方法是,首先生成应用程序的调试签名版本,然后再次生成发行版。

我不知道到底是什么发生了什么变化或最初的问题是什么,但它确实有效。我希望它也会对您有帮助,因为此错误非常烦人...


清理项目对我没有帮助,但是手动删除所有模块中的所有自动生成的构建文件夹很有帮助。
enter image description here


更新到Android Studio 3.4。?,我收到消息

Cause: buildOutput.apkData must not be null

寻找答案,我找到了程序:

Build-> Clean Project

但是它不起作用,我知道此过程会将内容删除到/build目录中,但是以我的经验,它在所有情况下均不起作用,因此我尝试了"原始"方式,删除了目录:

1
/app/build/

然后,我重建该项目,它奏效了。


我尝试了多种解决方案,但什么都没发生,然后我发现了
这为我工作

1
    deleting debug/output.json and release/output.json solved my problem

现在我可以生成apk


所有解决方案都不适用于我

Android Studio V 3.5

Android Gradle插件V 3.4.2

Gradle版本5.1.1

  • 清理项目
  • 重新启动Android Studio +使缓存无效
  • 删除构建,调试和发布文件夹
  • 制作项目
  • 生成签名的APK
  • 参考


    我已经尝试了很多方法来解决该问题,但是没有任何帮助。尝试生成签名的apk时出现此错误。

    降级到旧版本的Android Studio可以帮助(3.4.2),但是这不是解决方案。

    AS中的"清理项目"功能不会清理生成的apk的创建位置,并且可能有一个文件阻止了整个过程:output.json

    尝试从... / app / projectname / release / output.json中删除output.json


    我使用的是Android Studio 3.5 beta 2,并且遇到的错误完全相同,但仅限于发布版本。在尝试了我发现的所有其他解决方案之后,我能够再次编译的唯一方法是回到Android Studio 3.4。


    这个对我有用:

  • 手动从项目中删除构建文件夹。

  • 在android studio的终端中键入以下命令

  • 如果Windows用户

    1
    gradlew clean build

    如果是Linux用户

    1
    ./gradlew clean build


    只需更改Apk发行/调试位置。

    例如:

    1
    /home/sanaebadi/Desktop

    更改后:

    1
    /home/sanaebadi/apk

    通常,当您使用不同的项目运行多个android studio窗口时,通常会发生此问题。

    解决方法是

    • 选择项目而不是删除.gradle并构建文件夹
    • 而不是清理和重建项目。

    请参考所附的屏幕截图

    please ref screen shot attached


    对我来说,解决方案是从apk输出文件夹中删除所有文件和文件夹。
    为"生产"样式创建签名的apk时出现此问题,"功能"输出文件夹中的output.json导致了问题-> Android Studio 3.6 Canary 7向我显示了正确的错误消息。
    现在也可以通过Gradle Plugin 3.5.0在AS 3.5稳定版中使用。


    所有解决方案都不适用于我
    就我而言,从AndroidStudio 3.4+更新到3.5。
    最后,我将"目标文件夹"修改为" app / build / outputs / apk"来解决
    详细图片


    唯一适用于我的解决方案是在我的root gradle中使用

    1
    classpath 'com.android.tools.build:gradle:3.3.0'

    我尝试过的
    -手动清除所有构建文件夹
    -使缓存无效
    但这些都不是工作

    PS:我正在使用android studio 3.5 btw

    更新:

    就像@Vishrut Mavani一样,更改发行版本的目标文件夹也是可行的


    通常,此问题发生在将Android Studio V3.4更新到V3.5时。
    尝试删除debug/output.jsonrelease/output.json文件。

    然后尝试以下步骤:

    步骤1:清理项目(构建>清理项目)

    步骤2:重建项目("构建">"重建项目")


    我有android studio 3.5.1。对我来说,下面的步骤是有效的

  • 文件->使缓存无效/重新启动
  • 在android studio重新启动后,点击Build-> Clean project
  • 然后构建->重建项目

  • 解决方案 :-

    1- Build -> Clean Project没有帮助

    2- Build -> Make Project没有帮助

    3-重新启动Android Studio没有帮助

    4-从appproject手动删除Build文件夹无济于事

    我唯一的解决方案是从目标文件夹中删除所有旧版本


    将我的Android Studio v3.4更新到v3.5后,会发生此问题
    现在,它工作正常

    我通过删除debug / output.json和release / output.json文件解决了此问题

    Android Studio 3.5
    编译器版本28

    APK生成工作


    同样的错误也让我很生气。但是将我的Signed apk目的地从c / users / project / app更改为c / users / project对我有用。


    就我而言,具有不同构建配置的构建和启动项目是成功的。但是另一方面,生成带符号的apk引发错误Cause: buildOutput.apkData must not be null,并且生成输出切换视图打印BUILD SUCCESSFUL。手动安装以消息App not installed结尾。我的错是使用compileSdkVersion 'android-P',更改为compileSdkVersion 28后一切正常。


    1-删除所有变体的所有生成的应用程序捆绑包(.aab)和APK。

    2-删除构建文件夹

    3-清洁项目


    手动删除所有现有的构建变体文件夹以及对我有用的项目文件夹中的构建文件夹。


    生成带签名的APK进行调试,
    然后您可以生成签名的APK进行发布。


    我已经尝试了所有解决方案,但没有一个可以帮到您!经过多次尝试,我终于明白了,只要遵循提示即可:

  • 将您的签名按键(用于释放)复制到yourProject/app/
  • gradle.properties(修改与您自己的密钥相关的值):

    1
    2
    3
    4
    5
    MYAPP_RELEASE_STORE_FILE=KEYSTROK_NAME
    MYAPP_RELEASE_KEY_ALIAS=KEY_ALIAS
    MYAPP_RELEASE_STORE_PASSWORD=R_PASS
    MYAPP_RELEASE_KEY_PASSWORD=K_PASS
    android.enableR8=true
  • 应用程序级别build.gradle(在android内部):

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    signingConfigs{
        release{
            if (project.hasProperty('MYAPP_RELEASE_STORE_FILE')) {
                storeFile file(MYAPP_RELEASE_STORE_FILE)
                storePassword MYAPP_RELEASE_STORE_PASSWORD
                keyAlias MYAPP_RELEASE_KEY_ALIAS
                keyPassword MYAPP_RELEASE_KEY_PASSWORD
            }
        }
    }

    configurations {
        cleanedAnnotations
        compile.exclude group: 'org.jetbrains' , module:'annotations'
    }
  • 应用程序级别build.gradle(在buildTypes内部):

    1
    2
    3
    4
    5
    6
    7
    release {
        manifestPlaceholders = [analytics_deactivated:"false"]
        minifyEnabled true
        signingConfig signingConfigs.release
        useProguard true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }

    5.最后这个命令:

  • mac:./gradlew clean assemble_YOUR_FAVOR_Release

    赢:gradlew clean assemble_YOUR_FAVOR_Release

    其中_YOUR_FAVOR_是您的可选偏爱,如果您不使用任何偏爱,则只需使用assembleRelease而不是assemble_YOUR_FAVOR_Release


    AS 4.0.1(通过快照安装)

    Ubuntu 18.04版本

    通过构建变体配置构建。

    无效的缓存/构建/清理等组合本身并没有帮助,唯一有用的是将构建活动的构建变体切换回armDebug并在此之后进行清理/重新构建。

    enter image description here

    一旦切换回所需的变体,便可以正确构建。


    似乎清理项目可以解决问题,但对我来说,它的工作原理是这样的。

    File->sync project with gradle files.