1

所以我最近将我的 Android Studio 默认 JDK 切换到了 Java 8,所以我可以使用 Lambda 表达式。我必须让 Jack 让 gradle 构建,但现在当我尝试重建我的应用程序时,我收到了大约 3 个似乎来自 Jack 的不同错误。我似乎找不到任何这些问题的根源,并希望继续使用 J8 进行构建。非常感谢您对此的任何见解或帮助。以下是我在构建过程中遇到的错误:

1)

错误:库读取阶段:从文件'C:\Users\nicholas\AndroidStudioProjects\BaseIntegrations\app\build\intermediates\jill\debug\packaged\javax.inject-2.4.0-b10-e2682135301b663484690f1d3a4a523bcea2a732 中键入 javax.inject.Named。 jar' 已经从文件 'C:\Users\nicholas\AndroidStudioProjects\BaseIntegrations\app\build\intermediates\jill\debug\packaged\javax.inject-1-4a242883e90a864db3b80da68e11a844f842d2df.jar' 导入,输入 'javax.inject.Named '(有关类型冲突策略,请参见属性 'jack.import.type.policy')

2)

错误:com.android.jack.JackAbortException:库读取阶段:类型 javax.inject.Named 从文件 'C:\Users\nicholas\AndroidStudioProjects\BaseIntegrations\app\build\intermediates\jill\debug\packaged\javax.inject- 2.4.0-b10-e2682135301b663484690f1d3a4a523bcea2a732.jar' 已经从文件 'C:\Users\nicholas\AndroidStudioProjects\BaseIntegrations\app\build\intermediates\jill\debug\packaged\javax.inject-1-4a242883e90a864db4f842dedf1864db3b842d ,输入“javax.inject.Named”(请参阅​​属性“jack.import.type.policy”了解类型冲突策略)

3)

错误:com.android.jack.backend.jayce.TypeImportConflictException:类型 javax.inject.Named 从文件 'C:\Users\nicholas\AndroidStudioProjects\BaseIntegrations\app\build\intermediates\jill\debug\packaged\javax.inject- 2.4.0-b10-e2682135301b663484690f1d3a4a523bcea2a732.jar' 已经从文件'C:\Users\nicholas\AndroidStudioProjects\BaseIntegrations\app\build\intermediates\jill\debug\packaged\javax.inject-1-4a242883e90a864db4f842dedf1864db4f842d ,输入“javax.inject.Named”(请参阅​​属性“jack.import.type.policy”了解类型冲突策略)

4)

:app:compileDebugJavaWithJack FAILED 错误:任务 ':app:compileDebugJavaWithJack' 执行失败。java.io.IOException:com.android.jack.api.v01.CompilationException:库读取阶段:从文件“C:\Users\nicholas\AndroidStudioProjects\BaseIntegrations\app\build\intermediates\jill\ 中键入 javax.inject.Named debug\packaged\javax.inject-2.4.0-b10-e2682135301b663484690f1d3a4a523bcea2a732.jar' 已经从文件'C:\Users\nicholas\AndroidStudioProjects\BaseIntegrations\app\build\intermediates\jill\debug\packaged\javax 导入。 inject-1-4a242883e90a864db3b80da68e11a844f842d2df.jar',输入“javax.inject.Named”(有关类型冲突策略,请参见属性“jack.import.type.policy”)

这是应用程序级别的 build.gradle:

android {
    compileSdkVersion 24
    buildToolsVersion "24.0.1"

    defaultConfig {
        applicationId "com.nicholas.baseintegrations"
        minSdkVersion 16
        targetSdkVersion 24
        versionCode 1
        versionName "1.0"

        jackOptions {
            enabled true
        }
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    useLibrary  'org.apache.http.legacy'

    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_1_8
        targetCompatibility = JavaVersion.VERSION_1_8
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:24.2.0'
    compile 'com.google.android.gms:play-services-gcm:9.4.0'
    compile project(path: ':backend', configuration: 'android-endpoints')
    compile "com.getbase:basecrm-java:1.4.3"
    compile 'com.android.support:recyclerview-v7:24.2.0'
    compile 'com.android.support:palette-v7:24.2.0'
    compile 'com.android.support:cardview-v7:24.2.0'
    compile 'com.android.support:design:24.2.0'
    compile group: 'org.slf4j', name: 'slf4j-simple', version: '1.7.21'
    compile group: 'org.glassfish.jersey.media', name: 'project', version: '2.23.2', ext: 'pom'
}

非常感谢所有帮助,因为我知道这是一个新事物,但似乎无法找到有关 Jack/J8 构建过程的问题。提前致谢。

4

3 回答 3

1

我们正在研究这个,我认为这是由于 Jack 和 javac 的 Android Gradle 插件的不同行为。作为一种解决方法,您可以在 jackOptions 中尝试此操作

additionalParameters = [ "jack.import.type.policy" : "keep-first" ]

但请注意,使用该选项,Jack 将保留它遇到的类的第一个定义。

您可以在这里跟踪我们的进度:https ://code.google.com/p/android/issues/detail?id=222273

于 2016-09-13T17:36:18.380 回答
0

我最终解决了这个构建问题。我的依赖项之一是添加第二个 javax.inject 库,它抛出这些构建错误,说 javax.inject jar 已经从前一个导入。

所以我有 javax.inject-1 和 javax.inject-2.4.0-b10。我最终从我的依赖项之一中排除了 javax.inject 模块,它清除了构建问题,现在运行良好。

这是我的应用程序 build.gradle 的依赖项部分:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile project(path: ':backend', configuration: 'android-endpoints')
    compile group: 'org.slf4j', name: 'slf4j-simple', version: '1.7.21'
    compile (group: 'org.glassfish.jersey.media', name: 'project', version: '2.23.2', ext: 'pom')
    compile 'com.android.support:appcompat-v7:24.2.1'
    compile 'com.google.android.gms:play-services-gcm:9.4.0'
    compile ('com.getbase:basecrm-java:1.4.3') {
        exclude (group: 'javax.inject', module: 'javax.inject')
    }
    compile 'com.android.support:recyclerview-v7:24.2.1'
    compile 'com.android.support:palette-v7:24.2.1'
    compile 'com.android.support:cardview-v7:24.2.1'
    compile 'com.android.support:design:24.2.1'
}

您可以在 basecrm 依赖项中看到组排除。因此,如果其他人遇到此问题,请注意来自某些依赖项导入的重复外部库。

于 2016-09-14T15:59:06.163 回答
0

我遇到了同样的问题,然后我在这两个jar中发现了一个相同的包,但是它们不是同一个版本。所以修改他们有相同的版本。

于 2017-03-13T06:14:03.440 回答