android Gradle绝对/相对路径

arknldoa  于 2023-04-28  发布在  Android
关注(0)|答案(8)|浏览(239)

我遇到了以下问题。当我想在Gradle依赖项中使用本地jar时。
如果我加上:

compile files('libs/PushLinkAndroid-5.3.0.jar')

它不工作。
C:\Users\Kai\AndroidStudioProjects\ProjectA\app\src\main\java\de\xyz\xxx\projecta\BaseActivity.java:21:错误:软件包com.pushlink.android不存在导入com.pushlink.android.PushLink;
注意:某些输入文件使用或覆盖已弃用的API。使用-Xlint:deprecation重新编译以了解详细信息。4错误
未通过
失败:生成失败,出现异常。

  • 出了什么问题:执行任务“:app:compileDebugJava”失败。

编译失败;有关详细信息,请参阅编译器错误输出。

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

构建失败
总时间:6.543秒
如果我将绝对路径添加到Jar中,项目将编译,并且一切正常:

compile files('C:/Users/Kai/AndroidStudioProjects/ProjectA/libs/PushLinkAndroid-5.3.0.jar')

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

**编辑:**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')
}

注意:我试过不同的文件夹,PushLink.jar在“libs”和“libraries”中。我使用哪个命令或注解掉没有区别-绝对路径有效,相对路径无效。

sigwle7e

sigwle7e1#

试试这个,它会包含本地仓库中的所有JAR,所以你不必每次都指定它:

dependencies {
   compile fileTree(dir: 'libs', include: ['*.jar'])
}

此外,您还应该知道,当通过

files("relative/path/to/a.jar")

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

rootProject.files("relative/to/root/a.jar")

因此,请考虑这一点,并重新检查您的gradle设置是否正确。

iq3niunx

iq3niunx2#

如果调用URL方案路径,可以使用以下示例:

def path = "file://${projectDir}/ojdbc6.jar"
vx6bjr1n

vx6bjr1n3#

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

implementation fileTree(dir: 'libs', include: ['*.jar'])
...
implementation files('../library_name/libs/some.jar')
8tntrjer

8tntrjer4#

你的libs文件夹放错地方了。你必须把它放在MigraeneBook/app下,而不是直接放在MigraeneBook下。

unhi4e5o

unhi4e5o5#

首先,在我看来,如果可以避免的话,添加手动库是不好的做法,因为您需要自己维护库和路径。
我快速查看了一下maven repo,似乎他们没有这个特定的库。这是我所期望的:

compile('com.anypackage.name.PushLinkAndroid-5.3.0.jar')

由于这可能不是由您决定的,而是由https://www.pushlink.com/changelog.xhtml的开发团队决定的,所以没有办法。
现在说说你的问题:你的构建是从--stacktrace开始的吗?
从我能收集到的信息来看

compile files('C:/Users/Kai/AndroidStudioProjects/ProjectA/libs/PushLinkAndroid-5.3.0.jar')

你使用的是Windows系统。这在某些时候会很麻烦,因为Gradle期望路径看起来像这样:

C:/Users/Kai/AndroidStudioProjects/ProjectA/libs/PushLinkAndroid-5.3.0.jar

我大胆地猜测,当你不自己指定路径时,gradle会做这样的事情:

C:\Users\Kai\AndroidStudioProjects\ProjectA\libs/PushLinkAndroid-5.3.0.jar

您可以通过以下gradle任务验证行为:

task printBuildDir() {
    def buildDir = "${buildDir}"
    println buildDir
    def fixedDir = buildDir.replaceAll('\\\\', '/')
    println fixedDir
}

如果我猜的没错,你有几个选择:
1.使用完整路径
1.使用gradle内置路径,如buildDir,并根据示例替换\(我不确定这是否与我在dependencies标签中的示例完全一样,也许你需要自己定义一个全局变量)
1.让PushLink的开发者把这个库放到Maven Repo上

q35jwt9p

q35jwt9p6#

也可以指定每个JAR文件名。

dependencies {
    compile files('lib/dependency_one.jar', 'lib/dependency_two.jar')
}

这将告诉Gradle在编译过程中包含dependency_one.jar和dependency_two.jar。为了确认编译配置中包含了所有必需的JAR,您可以创建此helper任务,

task listJars << {
    configurations.compile.each { File file -> println file.name }
}

那就运行它

$ gradle -q listJars
hibernate-core-3.6.7.Final.jar
antlr-2.7.6.jar
commons-collections-3.1.jar
dom4j-1.6.1.jar
hibernate-commons-annotations-3.2.0.Final.jar
hibernate-jpa-2.0-api-1.0.1.Final.jar
jta-1.1.jar
slf4j-api-1.6.1.jar

阅读更多https://docs.gradle.org/current/userguide/declaring_dependencies.html

cbwuti44

cbwuti447#

我的问题是,我从Android Studio IDE本身复制了它,就像从一个项目的libs上复制command+c和从另一个项目的libs上复制command+v一样。由于某种原因,AS生成大小为零的jar文件......但是嘿,我学到了一些关于Gradle的新东西:)

34gzjxbg

34gzjxbg8#

gradle:7.4.2'新版本中,如果这样添加,会出现警告信息和黄色。

避免在.gradle文件中使用绝对路径

implementation files('C:/Users/Mori/AndroidStudioProjects/InternalLibsKotlin/banner/build/outputs/aar/banner-debug.aar')

所以你可以忽略它或者像这样做:

implementation files(/C:\/Users\/moriz\/AndroidStudioProjects\/InternalLibsKotlin\/banner\/build\/outputs\/aar\/banner-debug.aar/)

相关问题