相关疑难解决方法(0)

Gradle Implementation vs API配置

我正在试图弄清楚构建我的依赖项时有什么区别apiimplementation配置.
在文档中,它说implementation有更好的构建时间,但是,在类似的问题中看到这个 评论我想知道它是否属实.
由于我不是gradle的专家,我希望有人可以提供帮助.我已经阅读了文档,但我想知道一个易于理解的解释.

implementation dependencies android gradle

183
推荐指数
8
解决办法
5万
查看次数

使用gradle未解析aar库的传递依赖性

我已经调查了一段时间,可能看到这里最流行的答案与aartransitive依赖关系有关,但不知何故,我仍然不清楚如何使这个工作.

所以:

我有给定gradle配置的android库:

apply plugin: 'android-library'
apply plugin: 'android-maven'

version = "1.0.0"
group = "com.somepackage"

buildscript {
    repositories {
        mavenCentral()
        mavenLocal()
    }

    dependencies {
        classpath 'com.github.dcendents:android-maven-plugin:1.0'
    }
}

android {
    compileSdkVersion 19
    buildToolsVersion '19.0.3'

    defaultConfig {
        minSdkVersion 10
    }
}

repositories {
    maven { url 'http://www.bugsense.com/gradle/' }
}

dependencies {
    provided 'com.google.android.gms:play-services:+'
    provided 'com.android.support:appcompat-v7:+'
    compile 'com.google.code.gson:gson:2.2.4'
    compile 'com.bugsense.trace:bugsense:3.6'
    compile 'commons-net:commons-net:3.3'
}
Run Code Online (Sandbox Code Playgroud)

然后我将它部署到本地maven repo gradle install.部署库的POM文件如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.sprezzat</groupId> …
Run Code Online (Sandbox Code Playgroud)

java android gradle android-library aar

84
推荐指数
5
解决办法
4万
查看次数

如何在aar库中指定依赖项?

我创建了一个Android库(称为MyLib中),这取决于其他图书馆可在Maven的回购协议(如GSON,翻新等).

MyLib
 |
 |-- Retrofit
 |-- Gson
 |-- ...
Run Code Online (Sandbox Code Playgroud)

MyLib打包到一个aar文件中.

目标是发布一个aar库,该库可以包含在Android应用程序(称为MyApp)中,而无需第二次指定MyLib使用的依赖项.

MyApp
 |
 |-- MyLib
 |    |-- Retrofit
 |    |-- gson
 |    |-- ...
Run Code Online (Sandbox Code Playgroud)

这是MyLib的build.gradle文件

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.squareup.retrofit:retrofit:1.9.0'
    compile 'com.google.code.gson:gson:2.3.1'
}
Run Code Online (Sandbox Code Playgroud)

现在,如果我想建立和运行MyApp的不依赖问题,我不得不使用以下的build.gradle MyApp的(如果我不指定改装GSON作为DEPS,运行时异常被抛出,因为DEPS不可用) .

dependencies {
    compile('MyLib@aar')

    compile 'com.squareup.retrofit:retrofit:1.9.0'
    compile 'com.google.code.gson:gson:2.3.1'
}
Run Code Online (Sandbox Code Playgroud)

我不想在MyApp中指定MyLib中使用的依赖项,我应该如何编写build.gradle文件?

Thansk提前

dependencies pom.xml android-gradle-plugin aar

14
推荐指数
1
解决办法
2973
查看次数

Android Studio Gradle不使用传递依赖项

在一个单独的项目中遇到此问题后,我进行了一个测试项目以验证该问题。

  1. 打开Android Studio 3.0,我创建了一个新的基本项目。其主要模块称为app
  2. 我添加了一个名为的库模块libraryone
  3. 在中libraryone,我向Gson添加了一个依赖项,并使用Gson使用单个静态方法添加了一个类。
  4. 在中app,我向添加了一个依赖项libraryone。我和一起进行了简单的测试transitive = true,因为互联网似乎模糊地同意这样做可能会有所帮助。(它没有。)
  5. app,在MainActivity,我使用的班级libraryone。这行得通(只要我没有transitive = false设置)。
  6. 但是,我无法从MainActivity自身引用Gson 。无论是从Android Studio还是从命令行Gradle中,它都会给出“无法解析符号'Gson'”错误。这是不寻常的,而且令人不快,因为这意味着您必须在整个项目组中重复通用的依赖关系,并且这些类仍会包含在输出中。当然是我做错了什么,还是这是个错误?

我的代码如下:

MainActivity.java(在中app

package com.erhannis.test.dependencytest;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import com.erhannis.test.libraryone.LibClass;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        String s = LibClass.convert(new Object());
        System.out.println("out: " + s);

        new com.google.gson.Gson(); // This line gives a compile-time …
Run Code Online (Sandbox Code Playgroud)

dependencies android transitive-dependency android-gradle-plugin

6
推荐指数
2
解决办法
2905
查看次数

在Gradle 4.x中使用api使用aar库导致缺少依赖项

当我使用*.aar文件而不是使用Gradle 4.x的模块构建应用程序并遵循有关implementsapi文档时,我希望使用api包含的aar文件包含所有依赖项,但它没有.

当你这样做

git clone https://github.com/hannesa2/aar_dependency
./gradlew clean assembleDebug
Run Code Online (Sandbox Code Playgroud)

手段

dependencies {
    api project(':mylibrary')
Run Code Online (Sandbox Code Playgroud)

它工作正常.

但是当我使用lib-module的insted时,先前生成的*.aar文件作为依赖

 dependencies {
    api 'com.example.my.mylibrary:mylibrary-debug@aar'
Run Code Online (Sandbox Code Playgroud)

(在演示应用程序中)

git checkout with_aar
./gradlew clean assembleDebug
Run Code Online (Sandbox Code Playgroud)

我碰到了这个

任务:app:transformClassesWithDesugarForDebug线程"main"中的异常java.lang.TypeNotPresentException:在sun.invoke.util.BytecodeDescriptor的sun.invoke.util.BytecodeDescriptor.parseSig(BytecodeDescriptor.java:85)中输入不存在的io.reactivex.ObservableTransformer .parseMethod(BytecodeDescriptor.java:63)位于com.google.devtools的java.lang.invoke.MethodType.fromMethodDescriptorString(MethodType.java:1067)的sun.invoke.util.BytecodeDescriptor.parseMethod(BytecodeDescriptor.java:41).在org.objectweb.asm.MethodVisitor.visitInvokeDynamicInsn(未知来源)的org.objectweb.asm.MethodVisitor.visitInvokeDynamicInsn(未知来源)的build.android.desugar.LambdaDesugaring $ InvokedynamicRewriter.visitInvokeDynamicInsn(LambdaDesugaring.java:399)

因为我将这些aar工件上传到我们的Maven Nexus公司时遇到了这个问题,所以我创建了这个demo-repo以准确显示出错了什么.在演示应用程序或使用Maven我看到同样的问题.

有人知道我做错了吗?

android module android-gradle-plugin aar

4
推荐指数
1
解决办法
1754
查看次数

在应用程序中找不到传递库依赖项

假设我有一个库模块,其中包含一些第三方库,例如 OkHttp。当我在我的应用程序中包含这个库时,我无法使用这些第三方库。我阅读了以下文章第 1 条第 2 条 并尝试了
1. compile project(':library-name')
{将库的 .aar 文件作为模块导入到 myproject 中之后}
2. 我将 .aar 文件包含在 libs 文件夹中并添加了以下依赖项

build.gradle(项目级别)

allprojects {
repositories {
    flatDir {
        dirs 'libs'
    }
}
}
Run Code Online (Sandbox Code Playgroud)

build.gradle(应用程序级别)

compile fileTree(dir: 'libs', include: ['*.jar'])
compile ('com.myapp.package:library-name:1.0.0@aar'){
transitive=true
}
Run Code Online (Sandbox Code Playgroud)

3. 与2类似,但在
build.gradle中(应用程序级别)

compile fileTree(dir: 'libs', include: ['*.jar'])
compile (name:'library-name', ext:'aar'){
transitive=true
}
Run Code Online (Sandbox Code Playgroud)

但是,我仍然无法使用我的库中存在的传递库。我收到以下异常。

java.lang.NoClassDefFoundError: Failed resolution of: Lcom/squareup/okhttp/MediaType;
Run Code Online (Sandbox Code Playgroud)

有人可以帮忙吗

编辑:
以下是我的库的 build.gradle

compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.1.1'

compile 'org.apache.httpcomponents:httpcore:4.4.4' …
Run Code Online (Sandbox Code Playgroud)

android gradle android-library android-studio android-gradle-plugin

1
推荐指数
1
解决办法
2131
查看次数