如何在多个项目之间共享单个库源

2023-11-23

问题如标题。有人问了类似的问题here,当时唯一的解决方法是将项目发布到本地 Maven 存储库中。

这个问题在 Android Studio 0.5.+ 中是否已修复(如某些人声称的那样)?在其发行公告有一个声明说“支持模块内容根目录之外的源文件夹”。这是否意味着我们终于可以从项目文件夹外部导入库了?

我尝试了文件->导入项目..但它不起作用。

编辑 2:请参阅最新解决方案的已接受答案(截至 0.8.+)

EDIT:

我的项目目录结构只有一个模块main看起来像这样

MyApp
    main
        build.gradle
        src
    build.gradle
    settings.gradle

库项目目录只有一个模块,名称如下lib(它们都是在创建新库项目时自动生成的)

MyLibrary
    lib
        build.gradle
        src
    build.gradle
    settings.gradle

以下行添加到MyApp/settings.gradle:

include ':main', '..:MyLibrary'

将以下内容添加到MyApp/main/build.gradle:

dependencies {
    compile project(':..:MyLibrary')
}

结果出现以下错误:

FAILURE: Build failed with an exception.

* What went wrong:
A problem occurred configuring project ':main'.
> Configuration with name 'default' not found.

作为旁注,图书馆项目MyLibrary本身可以编译没有错误。问题似乎是settings.gradle无法识别库项目结构。


(自 2.1+ 版本起):

以下是我在项目目录之外共享库源代码所采取的步骤。我的代码不是普通的 Java 库,而是编译为 Android 模块,但该库模块不包含在主项目中。只要没有代码重复,我就可以接受,并且我只需要为所有项目维护一组库代码:

  1. 文件->新项目。为您的图书馆项目命名(这里我使用LibraryProject)。继续剩下的步骤来创建一个普通项目(因为这是一个库,所以我选择“不添加活动”)

  2. 默认情况下,Android studio 在项目文件夹中创建名为“app”的模块。为了防止名称与实际应用程序模块发生冲突,请将模块重命名为其他名称(右键单击左侧面板中的“app”模块 -> 重构 -> 重命名)。

  3. In the build.gradle 在你的库模块文件夹中, 更改顶行

    应用插件:'com.android.application' 到

    应用插件:'com.android.library'

然后删除“defaultConfig”下的“applicationId”行。另外,由于这是一个库,因此删除xlmns:...命名空间和<application ..>主体也来自 Manifest.xml。 这就是库部分的全部内容。现在,创建/修改您的主应用程序:

  1. 如果是新项目,首先创建新项目File->new Project->ApplicationName。

  2. Open settings.gradle(每个项目中应该只有一个这样的文件)并包含以下行(注意库模块中缺少前导分号):

    包括 ':app', '..:LibraryProject:yourLibraryModule'

  3. 然后转到文件->项目结构。

  4. 在“依赖项”选项卡下,单击右侧的绿色“+”按钮。选择“模块依赖关系”。选择您的库模块,然后单击“确定”。

您现在应该能够在应用程序中使用库类。


替代方法如果由于某种原因上述方法仍然存在问题,您可以尝试以下方法([此处][1]中建议):

  1. 重复上述步骤 1 至 4。默认情况下,主项目和外部(库)项目如下所示:

    /主项目 + 构建.gradle + 设置.gradle + 应用程序/ + 构建.gradle + 源文件/

    /图书馆项目 + 构建.gradle + 设置.gradle + 应用程序/ + 构建.gradle + 源文件/

  2. 像往常一样,将模块名称(在 android studio 中右键单击模块 -> 重构 -> 重命名)重构为不那么令人困惑的名称,例如

    /主项目 + 构建.gradle + 设置.gradle + 主模块/ + 构建.gradle + 源文件/

    /图书馆项目 + 构建.gradle + 设置.gradle + 库模块/ + 构建.gradle + 源文件/

  3. 修改settings.gradle in MainProject:

    包括 ':LibraryModule', ':app' 项目(':LibraryModule').projectDir = new File(settingsDir,'../LibraryProject/LibraryModule') 同步项目即可完成。


关于 Proguard 的注意事项

目前,您不应该在外部库项目/模块上使用混淆器。相反,您替换以下内容(原始答案[此处][2])

buildTypes {
    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'
    }
    debug {
        minifyEnabled false
    }
}

与以下内容(在build.gradle图书馆):

buildTypes {
    release {
        consumerProguardFiles 'proguard-project.txt'
    }
}

where proguard-project.txt是包含库项目的 proguard 规则的文件。 [1]:https://stackoverflow.com/a/17490233/1919013 [2]: https://stackoverflow.com/a/31031491

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在多个项目之间共享单个库源 的相关文章

随机推荐