我创建了一个名为“core”的Android库,它使用Logger库(https://github.com/orhanobut/logger)。
此处为build.gradle
:
apply plugin: 'com.android.library'
android {
compileSdkVersion 25
buildToolsVersion "25.0.1"
defaultConfig {
minSdkVersion 16
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.orhanobut:logger:1.15'
compile 'com.android.support:appcompat-v7:25.0.1'
testCompile 'junit:junit:4.12'
}
然后我构建了一个.aar
核心库。
我将此库作为依赖项添加到我的应用程序中,方法是将.aar
核心文件放在libs
文件夹中。
这是我申请的build.gradle
:
apply plugin: 'com.android.application'
android {
compileSdkVersion 25
buildToolsVersion "25.0.1"
defaultConfig {
applicationId "com.package.test"
minSdkVersion 16
targetSdkVersion 25
multiDexEnabled true
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
repositories {
mavenCentral()
jcenter()
flatDir {
dirs 'libs'
}
}
dependencies {
compile 'com.mypackage:core:1.0@aar'
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'
})
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:25.0.1'
compile 'com.android.support:multidex:1.0.1'
}
如您所见,我已激活multidex
。
它编译得很好但是在运行时,在第一次调用Logger
时我得到一个异常:
stack=java.lang.NoClassDefFoundError: Failed resolution of: Lcom/orhanobut/logger/Logger;
即使我设置了transitive = true
compile (com.mypackage:core:1.0@aar) {
transitive=true
}
它不起作用。
谢谢!
答案 0 :(得分:0)
我必须在音乐会上做一些事情才能让它发挥作用。
1)在你的图书馆项目中
将以下内容添加到项目级 gradle文件中:
buildscript {
dependencies {
classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1'
}
}
请确保为您的gradle版本使用正确版本的插件,请检查here。
将以下内容添加到模块级 gradle文件中:
apply plugin: 'com.github.dcendents.android-maven'
group='com.github.YourPackage'// Doesn't have to be github, just an example
此外,在此文件中,如果您使用Gradle 3.4+,请确保您的依赖项(您希望传递的依赖项)使用api
而不是implementation
。如果您使用的是Gradle< 3.4版本,compile
是可行的方法。例如:
dependencies {
api 'com.google.android.gms:play-services-location:15.0.1'
}
2)在您的应用程序项目中(使用该库)
将以下内容添加到模块级 gradle文件中:
dependencies {
implementation('com.github.YourPackage:yourRepo:version@aar') {
transitive=true
}
}
将以下内容添加到项目级 gradle文件中(但这取决于您的图书馆的投放位置,对我而言,它是jitpack):
allprojects {
repositories {
...
maven {
url 'https://jitpack.io'
credentials { username 'yourAuthKey' }// Only for private repositories
}
}
}
注意:您不应将auth密钥作为字符串添加到build.gradle中,而是将其放在gradle.properties文件的属性中。
注2:JitPack允许您使用例如development-SNAPSHOT
作为gradle依赖项的版本号。当您推送到开发分支时,Android Studio会缓存这些依赖项,并且不会重新下载它。要解决此问题,请在开发期间使用提交哈希作为版本号,或清除(删除)位于Windows ~/.gradle/caches/modules-2/metadata-x.xx/descriptors/com.github.YourPackage/yourRepo
的缓存文件。 (需要说的是,我很难学到这一点)。