依赖项

时间:2017-01-20 14:19:01

标签: android gradle

我创建了一个名为“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
}

它不起作用。

谢谢!

1 个答案:

答案 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的缓存文件。 (需要说的是,我很难学到这一点)。