Android 格拉德尔没有';执行'gradle clean Assembly'时不包括模块依赖项<;BuildVarian>`

Android 格拉德尔没有';执行'gradle clean Assembly'时不包括模块依赖项<;BuildVarian>`,android,gradle,android-gradle-plugin,Android,Gradle,Android Gradle Plugin,我有一个多模块的Android项目。环境的一些输入数据: Android Studio 1.0.1 Gradle 2.2.1 (Gradle Wrapper) Java 1.7.0_71 Android Gradle Plugin: 1.0.1 compileSdkVersion = 21 buildToolsVersion = '21.1.2' minSdkVersion = 14 targetSdkVersion = 21 当我从Android Studio运行项目时。应用程序在设备上正

我有一个多模块的Android项目。环境的一些输入数据:

Android Studio 1.0.1
Gradle 2.2.1 (Gradle Wrapper)
Java 1.7.0_71
Android Gradle Plugin: 1.0.1

compileSdkVersion = 21
buildToolsVersion = '21.1.2'
minSdkVersion = 14
targetSdkVersion = 21
当我从Android Studio运行项目时。应用程序在设备上正确编译和执行(适用于所有构建变体)。但是,当我尝试使用
/gradlew clean assembleDebug
或任何其他构建变量(我有4个:debug、alpha、beta、release)从终端组装应用程序时,构建成功,但当我尝试运行它时,对于模块项目中定义的任何类,应用程序崩溃,出现
java.lang.NoClassDefFoundError

我将ProGuard排除在嫌疑犯之外,因为它只在varian版本上运行。但所有构建的问题都是一致的

我还检查了模块是否不包含重复的依赖项

编辑

一个可能的堆栈跟踪:

9553-9553/my.package.app E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: my.package.app, PID: 9553
java.lang.NoClassDefFoundError: my.package.module1.Go
        at my.package.app.MyApplication.onCreate(MyApplication.java:59)
        at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1013)
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4729)
        at android.app.ActivityThread.access$1600(ActivityThread.java:174)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1367)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:146)
        at android.app.ActivityThread.main(ActivityThread.java:5593)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
        at dalvik.system.NativeStart.main(Native Method)
正如您所看到的,类
Go
是包
my.package.module1
的一部分,它在子模块
:module1
中定义(请参阅构建脚本源代码)

gradle构建的一部分:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies{
        classpath 'com.jakewharton.sdkmanager:gradle-plugin:0.12.+'
    }
}

apply plugin: 'android-sdk-manager'
apply plugin: 'com.android.application'

android {

    // ...
    // Compile and tools version

    defaultConfig {
        // Target sdk and so on
        applicationId 'my.package.app'

        // ...
        // Other stuff regarding version

    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }

    buildTypes {

        release { // ... }

        alpha { // ... }

        beta { // ... }

        debug { // ... }
    }

    packagingOptions {
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
    }
}

dependencies {
    // ...
    // Standatrt dependencies like support lib and others

    compile project(':module1')
    compile project(':module2')
    compile project(':module3')

    // Other moduels
}

在使用构建脚本并比较了组装构建和终端构建的方式后,我无意中发现了下一个区别:

  • 当AS清理项目时,它也会对所有模块项目执行
    generateSources
    generateStestSources
    (这是以这样一种方式安排的,即它总是在运行实际汇编命令之前执行)
  • 从终端运行
    /gradlew clean assembleDebug
    时,发现gradle没有及时获取导出的子模块ARR。可能是Gradle2.2(2.2.1)或Android Gradle插件中的一个bug——我不记得以前的版本有过这样的问题
  • 运行
    /gradlew clean generateDebugSources generateDebugTestSources assembleDebug
    时,问题仍然存在-也可能与该bug有关
  • 临时溶液

    按顺序执行以下命令:

    # ./gradlew clean generate<BuildVariant>Sources generate<BuildVariant>TestSources
    # ... task output
    # ...
    # ./gradlew assemble<BuildVariant>
    
    。/gradlew清洁发电机资源发电机测试源
    # ... 任务输出
    # ...
    #/gradlew组装
    
    通过这种方式,输出apk与所有模块项目组装在一起

    长期解决方案


    发出问题通知单

    提供有关错误的完整信息您需要什么样的信息?错误的完整堆栈跟踪,完整构建。Grald添加了堆栈跟踪和部分构建脚本…我已尝试使用代码支付。。。通过注释使用一个模块中的类的内容。。。终端建设仍然崩溃。。。gradle没有在最终APK中打包我所有模块的代码。如果这是一个错误,那么好吧。。。但是在IDE中,它工作得很好。