无法通过子模块的传递使用找到库

Ale*_*lex 4 android gradle android-gradle-plugin android-gradle-3.0

安卓工作室3.4.2

我有一个使用模块mytransport的主项目(应用程序) ,如下所示:

app/build.gradle

dependencies {
    annotationProcessor "org.androidannotations:androidannotations:$AAVersion"

    implementation fileTree(dir: 'libs', include: ['*.jar'])

    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    implementation('com.crashlytics.sdk.android:crashlytics:2.7.0@aar') { transitive = true; }
    implementation 'com.google.android.material:material:1.1.0-alpha07'
    implementation "org.androidannotations:androidannotations-api:$AAVersion"

    implementation project(':mytransport')

}
Run Code Online (Sandbox Code Playgroud)

mytransport/build.gradle中:

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

    implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.google.code.gson:gson:2.8.5'

}
Run Code Online (Sandbox Code Playgroud)

mytransport代码中我成功使用这样的代码:

MyProject\mytransport\src\main\java\com\mycompany\android\mytransport\util\MyUtil.java

片段:

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;

public class JSONUtil {
private static GsonBuilder gsonbuilder = new GsonBuilder();
Run Code Online (Sandbox Code Playgroud)

好的。

现在我想在主应用程序中使用gson lib。所以在主应用程序中我尝试这个

MyProject\android\MyProject\app\src\main\java\com\mycompany\android\myproject\main\MainApp.java
Run Code Online (Sandbox Code Playgroud)

片段

import android.app.Application;
import android.content.Context;
public class MainApp extends Application {

private static GsonBuilder gsonbuilder = new GsonBuilder();
Run Code Online (Sandbox Code Playgroud)

但我得到编译错误:

Cannot resolve symbol 'GsonBuilder'
Run Code Online (Sandbox Code Playgroud)

为什么在主应用程序中找不到gson lib ?我通过模块使用它传递mytransport

Gab*_*tti 7

使用api而不是implementation.

mytransport/build.gradle

dependencies {
   //...
   api 'com.google.code.gson:gson:2.8.5'
}
Run Code Online (Sandbox Code Playgroud)

只是一个例子。

library/build.gradle

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

app/build.gradle

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

在您的应用程序中,您将能够访问librarylibraryA

使用implementation配置:

library/build.gradle

dependencies {
    implementation project(':libraryA')
}
Run Code Online (Sandbox Code Playgroud)

app/build.gradle

dependencies {
    implementation project(':library')
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,在您的应用程序中您无法访问libraryA 方法。

  • 这是最具描述性的答案,易于理解并且有效!谢谢@gabriele-mariotti (2认同)