Android aar 包含 jar 依赖项资源文件夹



你好

在开发安卓AAR模块时,遇到以下问题我的 AAR 模块有一些 jar 依赖项,其中一些具有带有错误本地化错误消息的资源文件夹。出于某种原因,当我创建模块 AAR 时,我注意到 Android 构建过程从 jar 依赖项中排除了资源文件夹。依赖项文件夹是必不可少的部分,否则找不到错误详细信息。

如果有什么可以阐明这个问题,我尝试在 main/resources//messages.properties 下创建额外的资源文件夹,但没有帮助。

任何帮助将不胜感激

这是我的 gradle 文件

apply plugin: 'com.android.library'
apply plugin: 'jacoco'

allprojects {
    repositories {
        jcenter()
        maven {
            url "https://maven.google.com"
        }
    }
}
buildscript {
    repositories {
        jcenter()
        google()
        mavenCentral()
    }
    dependencies {
        classpath 'com.dicedmelon.gradle:jacoco-android:0.1.2'
        classpath 'com.android.tools.build:gradle:3.2.1'
    }
}

android {
    compileSdkVersion 27
    buildToolsVersion '26.0.3'
    configurations {
        javadocDeps
    }

    defaultConfig {
        minSdkVersion 21
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        debug {
            testCoverageEnabled false
        }
    }
    testOptions {
        unitTests.all {
            jacoco {
                includeNoLocationClasses = true
            }
            testLogging {
                events "passed", "skipped", "failed", "standardOut", "standardError"
                outputs.upToDateWhen {false}
                showStandardStreams = true
            }
        }
        unitTests.returnDefaultValues = true
    }
    lintOptions {
        abortOnError false
    }
    sourceSets {
        androidTest {
           ...
        }
        test {
        }
    }
}


//assembleDebug.dependsOn(copyResDirectoryToClasses)
dependencies {
    releaseCompile fileTree(include: ['*.jar'], dir: 'libs')

    provided 'com.android.support:appcompat-v7:27.1.1'
    provided 'org.jetbrains:annotations:16.0.3'
    provided 'com.google.code.findbugs:annotations:3.0.1'
    provided 'org.codehaus.sonar-plugins:sonar-ant-task:2.2'
    provided 'org.jetbrains:annotations-java5:15.0'
    provided 'com.google.android:annotations:4.1.1.4'
    provided 'com.squareup.okhttp3:okhttp:3.9.1'
    provided 'com.squareup.okhttp3:okhttp-urlconnection:3.9.1'
    androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2'
    androidTestCompile 'com.android.support.test:runner:0.5'
    androidTestCompile 'org.mockito:mockito-core:1.9.5'
    androidTestCompile 'com.google.dexmaker:dexmaker:1.2'
    androidTestCompile 'com.google.dexmaker:dexmaker-mockito:1.2'
    androidTestCompile files('../sdkSample/lib/qa_utils.jar')
    androidTestCompile 'com.google.android:annotations:4.1.1.4'
    javadocDeps 'com.android.support:appcompat-v7:27.1.1'
    javadocDeps 'com.squareup.okhttp3:okhttp:3.9.1'
    javadocDeps 'com.squareup.okhttp:okhttp-urlconnection:3.9.1'
    javadocDeps 'com.google.code.findbugs:annotations:3.0.1'
    javadocDeps group: 'org.mozilla', name: 'rhino', version: '1.7.7.1'
    javadocDeps group: 'org.jetbrains', name: 'annotations', version: '16.0.3'
    testCompile files('../sdkSample/lib/qa_utils.jar')
    testCompile 'junit:junit:4.12'
    testCompile 'org.json:json:20171018'
    testCompile 'com.google.android:annotations:4.1.1.4'
    testCompile 'org.testng:testng:6.13.1'
    testCompile 'com.squareup.okhttp3:okhttp:3.9.1'
    testCompile 'com.squareup.okhttp3:okhttp-urlconnection:3.9.1'
    testCompile 'org.robolectric:robolectric:3.8'
    androidTestCompile 'com.squareup.okhttp3:okhttp:3.9.1'
    androidTestCompile 'com.squareup.okhttp3:okhttp-urlconnection:3.9.1'
    testCompile 'org.khronos:opengl-api:gl1.1-android-2.1_r1'
}

gradle.taskGraph.whenReady {
    gradle.taskGraph.allTasks.each {
        if(it.project == 'sdkSample') {
            it.onlyIf { false }
        }
    }
}

//ignore all test failures - is done temporary, the final solution is test categorization
project.gradle.taskGraph.whenReady {
    -> project.tasks.findAll { it.name =~ /connected.+AndroidTest/ ||
            it.name == "testDebugUnitTest" ||
            it.name =="testReleaseUnitTest" }.each {
        it.ignoreFailures = true
    }
}
您需要

使用 api 而不是 provided 。您可以从此处找到更多信息。

据我所知,aar 不能有传递依赖关系。您可以尝试导出fat aar也可以尝试

implementation 'your.package:your_artifact:your_version' {transitive = true}

PS:不要使用类型@aar

也称为flatDir,因为flatDir依赖项不会解析传递物)

implementation 'your.package:your_artifact:your_version@aar' {transitive = true}

另一方面,您需要将项目转换为 maven 标准。因此,您需要一个pom.xml文件,该文件在依赖项标记下指向传递依赖项。

正如您所经历的,jar 文件也不能有资源文件。如果您不需要资源文件,只需通过执行createFullJarRelease任务导出 jar。

如果必须使用 .aar,则可以添加库在使用者中使用的其他依赖项。

最新更新