Gradle绝对/相对路径

fig*_*-ii 7 java android gradle

我有以下问题.当我想在我的Gradle依赖项中使用本地jar时.

如果我只是添加:

compile files('libs/PushLinkAndroid-5.3.0.jar')
Run Code Online (Sandbox Code Playgroud)

它不起作用.

C:\ Users\Kai\AndroidStudioProjects\ProjectA\app\src\main\java\de\xyz\xxx\projecta\BaseActivity.java:21:error:package com.pushlink.android不存在import com.pushlink.android .PushLink;

注意:某些输入文件使用或覆盖已弃用的API.注意:使用-Xlint重新编译:弃用以获取详细信息.4个错误

失败

FAILURE:构建因异常而失败.

  • 出了什么问题:任务执行失败':app:compileDebugJava'.

    编译失败; 请参阅编译器错误输出以获取详细信

  • 尝试:使用--stacktrace选项运行以获取堆栈跟踪.使用--info或> - debug选项运行以获得更多日志输出.

建筑失败

总时间:6.543秒

如果我添加Jar的绝对路径,项目编译,一切正常:

compile files('C:/Users/Kai/AndroidStudioProjects/ProjectA/libs/PushLinkAndroid-5.3.0.jar')
Run Code Online (Sandbox Code Playgroud)

看起来路径有问题但是当绝对路径工作正常时怎么可能呢?

编辑: Build.gradle

apply plugin: 'com.android.application'

android {
    compileSdkVersion 22
    buildToolsVersion "22.0.1"

    defaultConfig {
        applicationId "de.xyz.kai.migraenebook"
        minSdkVersion 16
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    //compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:appcompat-v7:22.2.0'
    compile 'com.jakewharton:butterknife:7.0.1'
    compile project(':volley')
    debugCompile 'im.dino:dbinspector:3.2.1@aar'
    compile 'de.hdodenhof:circleimageview:1.3.0'
    compile 'com.android.support:recyclerview-v7:+'
    //compile files('C:/Users/Kai/AndroidStudioProjects/MigraeneBook/libs/PushLinkAndroid-5.3.0.jar')
    compile files('libs/PushLinkAndroid-5.3.0.jar')
    //compile files('libraries/PushLinkAndroid-5.3.0.jar')
    //compile files('C:/Users/Kai/AndroidStudioProjects/MigraeneBook/libraries/PushLinkAndroid-5.3.0.jar')
}
Run Code Online (Sandbox Code Playgroud)

注意:我尝试了不同的文件夹,PushLink.jar位于"libs"和"libraries"中.它使用哪个命令或注释掉并没有什么区别 - 绝对路径是有效的,相对不是.

sol*_*lar 9

试试这个,它将包括本地存储库中的所有JAR,因此您不必每次都指定它:

dependencies {
   compile fileTree(dir: 'libs', include: ['*.jar'])
}
Run Code Online (Sandbox Code Playgroud)

此外,您应该知道通过引用文件时

files("relative/path/to/a.jar")
Run Code Online (Sandbox Code Playgroud)

路径是相对于此代码段所在的buildscript进行评估的.所以当你的build.gradle文件位于时/a/project/build.gradle,那个jar应该在/a/project/relative/path/to/a.jar.在多项目gradle构建中,您可以将jar放在相对于根项目的文件夹中,并通过所有子项目引用它

rootProject.files("relative/to/root/a.jar")
Run Code Online (Sandbox Code Playgroud)

因此,请考虑此问题并重新检查您的gradle设置是否正确.


小智 6

老问题,但可能对某人有帮助。我遇到了同样的问题,我在项目根文件夹中有 2 个库,并且它不适用于相对路径。如果您的库位于项目的根文件夹中,请在相对路径之前添加 ../。

implementation fileTree(dir: 'libs', include: ['*.jar'])
...
implementation files('../library_name/libs/some.jar')
Run Code Online (Sandbox Code Playgroud)


PRI*_*LOP 5

如果你调用 URL 方案路径,你可以使用这个例子:

def path = "file://${projectDir}/ojdbc6.jar"
Run Code Online (Sandbox Code Playgroud)