Android Studio:添加自定义jar作为依赖项

时间:2018-12-05 15:20:19

标签: java android android-studio

我有一个Java REST项目,可以使用DTO classes与Android Project通信。

最初,我创建了在两个项目中都重复的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')
}

2 个答案:

答案 0 :(得分:1)

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

我将对此进行更新:

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

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

编辑 但是,真正的问题是参数的顺序。您想将目录作为第一个参数传递。 fileTree会构建ConfigurableFileTree,因此第一个参数必须是基本目录。

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

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

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();
    }
}

答案 1 :(得分:0)

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 }

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

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