Android aar 库不包含依赖项

2022-09-04 19:32:28

我看到类似的问题,但没有找到公认的答案。问题 - 我有自己的Android库,有一些小功能。我的图书馆使用其他 - 例如Hawk(无 sql 数据库)。我的库 gradle 文件:

apply plugin: 'com.android.library'
buildscript {
    repositories {
        maven { url "https://www.jitpack.io" }
    }
}
android {
    compileSdkVersion 26
    buildToolsVersion "26.0.1"

    defaultConfig {
        minSdkVersion 18
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'library.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:26.0.2'
    compile 'com.github.orhanobut:hawk:1.23'
    testCompile 'junit:junit:4.12'
}

图书馆工作正常。如果我在另一个项目内将其用作项目 - 它也可以工作。但是当我生成文件(带有->)并包含在单独的项目中时 - 它失败了。Hawk com.orhanobut.hawk package 和 ofc other (if i will use then)是不可见的。来了。如果我删除*.aargradleassembleReleaseClassNotFoundException

minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'library.pro'

结果不会改变。我试图将以下行添加到proguard文件中(library.pro)

-keep class com.orhanobut.hawk {public *;}
-keep class com.orhanobut.hawk.* {public *;}

结果是一样的。

所以我有两个问题:1 - 我该怎么做才能让我的主项目看到我的库的第三方依赖项?2 - 是否可以混淆我的库的代码(只有我的,而不是依赖项)?


答案 1

我应该做些什么来使我的主项目看到我的库的第三方依赖项?

aar 文件不包含传递依赖项,也没有描述模块使用的依赖项的 pom 文件。

这意味着,如果您使用存储库导入 aar 文件,则必须在项目中也指定依赖项flatDir

您应该使用 maven 存储库(私有或公共)来避免此问题。
在这种情况下,gradle 使用将包含依赖项列表的 pom 文件下载依赖项。


答案 2

解决依赖关系问题的另一种方法是获取要使用的依赖项的 jar 文件,并将它们放在模块的 libs 文件夹中。这会将所有依赖项 jar 复制到库的 jar 或 aar 中。

请注意,我之所以强调jar,是因为你不能在libs文件夹中包含aar文件,gradle仍然不支持aar文件在aar里面开箱即用。有一些像fataar这样的gradle插件可以解决这个问题。


推荐