Gradle:如何在Android版本中包含来自依赖java项目的本地jar?

gmu*_*ick 12 java android jar gradle android-gradle-plugin

在我的Android应用程序中,我正在获取一个java.lang.NoClassDefFoundError引用依赖.jar中的代码的代码.我的项目包括一个Android模块以及一个只有java的库模块,这是jar依赖的地方.我正在使用gradle 1.10来构建项目.这是我的项目布局:

myProject
- app (Android)
  - src
  - build.gradle

- lib (java)
  - src     
  - libs
    - local-dependency.jar
  - build.gradle

- build.gradle
- settings.gradle
Run Code Online (Sandbox Code Playgroud)

主项目build.gradle是空白而主要项目settings.gradle如下:

include ':app', ':lib'
Run Code Online (Sandbox Code Playgroud)

Android应用程序build.gradle看起来像:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.8.+'
    }
}

apply plugin: 'android'

repositories {
    mavenCentral()
}

android {
    compileSdkVersion 18
    buildToolsVersion "19.0.2"

    defaultConfig {
        minSdkVersion 18
        targetSdkVersion 18
        versionCode 1
        versionName "1.0"
    }
}

dependencies {
    compile project(':lib')
}
Run Code Online (Sandbox Code Playgroud)

该图书馆build.gradle是:

apply plugin: 'java'

repositories {
    mavenCentral()
}

dependencies {
    compile <some-dependency-in-maven>
    compile files('libs/local-dependency.jar') 
}
Run Code Online (Sandbox Code Playgroud)

一切都编译和打包没有错误,我没有在IDE(IntelliJ 13)中看到任何错误.出于某种原因,我local-dependency.jar在Android编译期间没有被添加到dex-ing进程中.lib项目中指定的任何maven依赖项都会添加到Android .apk中就好了; 这只是我本地的jar依赖.有什么我想念的吗?

谢谢!

Xav*_*het 6

这不可能直接实现,因为Gradle中未将本地jar声明为传递依赖项.

您有两种选择:

  • 合并你的java库中的两个jar,以便输出包含本地jar.
  • 创建一个没有源,只有jar的不同项目,并使项目依赖它.

第二个选项使您能够让多个项目直接依赖于本地jar(在它之上变为传递依赖).为此,创建一个新的gradle项目,并将其放入build.gradle以下内容:

configurations.create("default")
artifacts.add("default", file('somelib.jar'))
Run Code Online (Sandbox Code Playgroud)

这只是将您的jar注册为项目发布的默认工件,这将被其他项目使用.