2017-10-21 238 views
0

我看到类似的问题,但未找到接受的答案。 问题 - 我有我自己的一些小函数的android库。 我的图书馆使用他人 - f.e. Hawk(没有sql数据库)。 我的图书馆gradle文件:Android aar库不包含依赖关系

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' 
} 

图书馆工作正常。如果我在另一个项目中使用它作为项目 - 它也可以工作。但是当我生成*.aar文件(与gradle - >assembleRelease)并包括到单独的项目 - 它失败。项目只看到我的图书馆的类。 Hawk com.orhanobut.hawk包和ofc其他(如果我将使用)不可见。所以ClassNotFoundException来了。 如果我删除

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文件不包含transitive依赖性并且不具有其描述由模块所使用的依赖关系的POM文件。

这意味着,如果要导入使用flatDir你也必须指定项目依赖一个AAR文件。

您应该使用maven资源库,私人或公共,以避免此问题。
在这种情况下,gradle这个下载使用POM文件这将包含依赖项列表中的依赖关系。

+0

奥奇,你能提供一个帮助链接吗? – TooLazy

+0

@TooLazy这里一个帖子:https://medium.com/prismapp/publishing-android-library-to-bintray-ba588184b690 –