【问题标题】:Android Studio: add a custom jar as dependencyAndroid Studio:添加自定义 jar 作为依赖项
【发布时间】:2019-05-07 04:59:48
【问题描述】:

我有一个使用 DTO classes 与 Android 项目通信的 java REST 项目。

最初,我在两个项目中都创建了重复的 DTO 类,但现在我有了一个带有这个通用 DTO 类的新 Java/JAR 项目,我想在两个项目(Rest 和 Android)中使用这个库。

我将 JAR 文件粘贴到 Android Studio 的 app/libs 文件夹中。

我将此文件添加为 Android Studio 中的 Jar 依赖项。

build.gradle 文件包含 jar 的引用 编译文件('libs/my-custom-jar-1.0.0.jar')

dependencies {
    compile files('libs/my-custom-jar-1.0.0.jar')
    compile fileTree(include: ['*.jar'], dir: 'libs')
}

我关注了steps described here,但没有用。 JAR 文件中打包的类不可用。

我也尝试“使缓存无效并重新启动”Android Studio

[]的

编辑

文件 build.gradle

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    androidTestCompile 'com.google.code.findbugs:jsr305:3.0.2'
    compile project(':com.custom.dialog')
    compile project(':zxing_standalone')
    compile 'com.android.support:appcompat-v7:26.0.2'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    compile 'com.xxxxxxxx.android:library:1.0.23@aar', { transitive = true }
    compile 'com.google.code.gson:gson:2.2.4'
    compile 'com.squareup.retrofit2:retrofit:2.3.0'
    compile 'com.squareup.retrofit2:converter-scalars:2.1.0'
    compile 'com.squareup.retrofit2:converter-gson:2.3.0'
    compile 'com.squareup.okhttp3:okhttp:3.9.0'
    compile 'com.squareup.okhttp3:logging-interceptor:3.9.0'
    compile 'com.android.support:design:26.0.2'
    compile 'commons-io:commons-io:2.0.1'
    compile 'org.apache.commons:commons-lang3:3.5'
    compile files('libs/my-custom-jar-1.0.0.jar')
}

【问题讨论】:

  • 你能折叠你的 libs 文件夹,截取 .jar 文件的内容并将其粘贴到帖子中吗?另外,您说课程不可用。您是否确保它们是公共类,以便您可以从打包的 jar 外部调用它们?
  • 您能否将折叠的 libs/ 文件夹粘贴为文件资源管理器中的屏幕截图,如下所示?
  • 这方面有任何进展,你有它工作了吗?您可以分享更多内容,让我们帮助您了解

标签: java android android-studio


【解决方案1】:

确保您已将 jar 文件复制到您的项目中,但您引用的是一个非常旧的帖子。无需为 jar 文件添加额外的行,因为 fileTree 方法将包含 libs 文件夹中带有 .jar 扩展名的任何内容。

我会将我的依赖项更新为:

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

然后进行 gradle 同步,您的文件应该可供您使用。

编辑 真正的问题是参数的顺序。您想将目录作为第一个参数传递。 fileTree 构建一个 ConfigurableFileTree,所以第一个参数需要是基目录。

更新 这是我的项目在构建 .jar 并将其粘贴到我的项目后的样子,使用上述依赖项并同步 gradle。

这可以从我的活动代码中访问:

public class MainActivity extends AppCompatActivity {

    PersonDAO personDao;

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

        personDao = new PersonDAO("John", "Smith", 50);
    }

    public void doSomething(View view){
        Toast.makeText(this, getString(R.string.greeting, personDao.getFirstName()), Toast.LENGTH_SHORT).show();
    }
}

【讨论】:

  • 感谢您的回答。错误仍然存​​在@kandroidj 我编辑了原始帖子并粘贴了完整的 build.gradle 文件
【解决方案2】:

A) 只添加这一行:

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

并删除这一行:

compile files('libs/my-custom-jar-1.0.0.jar')

添加两行时,您最终会得到重复的依赖项。

B) 和这个本地AAR 依赖:

compile 'com.xxxxxxxx.android:library:1.0.23@aar', { transitive = true }

需要在根项目的build.gradle 中将libs 目录定义为flatDir 存储库:

allprojects {
    repositories {
        ...
        flatDir { dirs "libs" }
    }
}

【讨论】:

  • 感谢您的回答。我的环境是 Android Studio 2.3 (gradle 2.3.0),我无法更新它。 implementation fileTree(dir: "libs", include: ["*.jar"]) 不可用
猜你喜欢
  • 1970-01-01
  • 2019-04-11
  • 2013-05-21
  • 1970-01-01
  • 2018-11-04
  • 2016-11-22
  • 1970-01-01
  • 2016-02-19
  • 1970-01-01
相关资源
最近更新 更多