首页 > 解决方案 > Android aar包含jar依赖资源文件夹

问题描述

你好

在开发 Android 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
    }
}

标签: androidjardependenciesandroid-resources

解决方案


您需要使用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 文件,该文件在 dependencies 标记下指向传递依赖项。

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

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


推荐阅读