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

  • 打开Android Studio 3.0,我创建了一个新的基本项目。它的主要模块称为app
  • 我添加了一个名为libraryone的库模块。
  • libraryone中,我向Gson添加了一个依赖项,并使用Gson使用单个静态方法添加了一个类。
  • app中,我向libraryone添加了一个依赖项。我对它进行了简单测试,并使用transitive = true进行了测试,因为互联网似乎模糊地同意这样做可能会有所帮助。 (没有。)
  • app中,在MainActivity中,我使用了libraryone中的类。这行得通(只要我没有设置transitive = false即可)。
  • 但是,我无法从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 error: "Cannot resolve symbol 'Gson'"
        }
    }
    

    LibClass.java(在libraryone中)
    package com.erhannis.test.libraryone;
    
    import com.google.gson.Gson;
    
    public class LibClass {
        public static String convert(Object o) {
            Gson gson = new Gson();
            return gson.toJson(o);
        }
    }
    

    build.gradle(app)
    apply plugin: 'com.android.application'
    
    android {
        compileSdkVersion 26
        defaultConfig {
            applicationId "com.erhannis.test.dependencytest"
            minSdkVersion 18
            targetSdkVersion 26
            versionCode 1
            versionName "1.0"
            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
    }
    
    dependencies {
        implementation fileTree(dir: 'libs', include: ['*.jar'])
    
        implementation 'com.android.support:appcompat-v7:26.1.0'
        implementation 'com.android.support.constraint:constraint-layout:1.0.2'
        testImplementation 'junit:junit:4.12'
        androidTestImplementation 'com.android.support.test:runner:1.0.1'
        androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
    
        implementation (project(path: ':libraryone'))
    }
    

    build.gradle(libraryone)
    apply plugin: 'com.android.library'
    
    android {
        compileSdkVersion 26
        defaultConfig {
            minSdkVersion 18
            targetSdkVersion 26
            versionCode 1
            versionName "1.0"
            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
    }
    
    dependencies {
        implementation fileTree(dir: 'libs', include: ['*.jar'])
    
        implementation 'com.android.support:appcompat-v7:26.1.0'
        testImplementation 'junit:junit:4.12'
        androidTestImplementation 'com.android.support.test:runner:1.0.1'
        androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
    
        implementation 'com.google.code.gson:gson:2.8.2'
    }
    

    最佳答案

    我认为是因为implementation。尝试使用api而不是implementation更改:

    implementation (project(path: ':libraryone'))
    

    到 :
    api project(path: ':libraryone')
    

    和:
    implementation 'com.google.code.gson:gson:2.8.2'
    

    到:
    api 'com.google.code.gson:gson:2.8.2'
    

    09-25 18:16