当前位置: 首页 > 知识库问答 >
问题:

如何跨多个项目共享单个库源

牟嘉
2023-03-14

标题中的问题。这里提出了一个类似的问题,当时唯一的解决办法是将项目发布到本地Maven存储库中。

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

我试过文件-

编辑2:查看最新解决方案的接受答案(截至0.8。)

编辑:

我的项目目录结构只有一个模块main,如下所示

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

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

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

以下行添加到MyApp/settings中。格雷德尔

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

以下内容被添加到MyApp/main/build中。格雷德尔

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本身可以编译而不出错。问题似乎是设置。gradle无法识别库项目结构。

共有3个答案

贺浩壤
2023-03-14

我想为我的Android Wear项目做类似的事情,在那里你有移动磨损模块。在Android Studio 1.5.1,你可以做文件-

呼延晋
2023-03-14

是的,它现在在0.5.0中工作。它没有一个友好的UI(导入项目不是您想要的,因为它创建了一个全新的项目;导入模块仍然处于中断状态;请参阅https://code.google.com/p/android/issues/detail?id=62122),但您可以设置生成文件以使其正常工作。

假设你有一个目录结构,看起来像这样:

MyApp
    appmodule
        build.gradle
            src
                main
                    java
    build.gradle
    settings.gradle
MyPlainJavaLibrary
    build.gradle
    src
        java

请注意,MyPlainJavaLibrary不在文件系统MyApp目录下。

设置设置。gradle像这样的文件:

include ':appmodule', '..:MyPlainJavaLibrary'

并在构建中包含对它的依赖关系。gradle像这样(不要忘记前面的冒号):

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

这对我有用。在我的Project查看器中,我现在看到MyApp和MyPlainJavaLibrary作为视图中的两个根级模块目录,我可以使java导入语句跨模块边界等工作。

请注意,在此默认设置中,此共享模块将只有一个生成输出文件夹,该文件夹将在使用它的所有项目之间共享。这可能不是你想要的。如果您希望使用共享模块为每个项目创建一个不同的输出目录,您可以在源集中对输出目录进行一些处理;如果你想在这方面得到帮助,我建议你自己尝试一下,如果你被卡住了,可以发布一个关于你工作细节的问题。

每个项目只能有一个settings.gradle文件,所以这不会占用整个其他多模块Gradle项目并一下子引入所有模块;您需要单独引入它们。但是,它应该满足在多个项目中使用一个模块的用例。

毋城
2023-03-14

(截至版本2.1):

下面是我在项目目录之外共享库源的步骤。我的代码不是简单Java库,而是编译成Android模块,但是库模块不包含在主项目中。只要没有代码重复,我只需要为所有项目维护一组库代码就可以了:

1) 文件-

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

3) 在构建中。gradle在库模块文件夹中,更改顶行

apply plugin: 'com.android.application'

apply plugin: 'com.android.library'

然后删除"defaultConfig"下的"appationId"行。另外,由于这是一个库,删除xlmns:...命名空间和

4) 如果是新项目,请首先创建新项目文件-

5) 打开设置。gradle(每个项目中应该只有一个这样的文件),并包括以下行(注意库模块中缺少前导分号):

include ':app', '..:LibraryProject:yourLibraryModule'

6) 然后去归档-

7) 在“依赖项”选项卡下,单击右侧的绿色“”按钮。选择“模块依赖项”。选择库模块,然后单击“确定”。

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

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

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

  /MainProject
    + build.gradle
    + settings.gradle
    + app/
      + build.gradle
      + src/

  /LibraryProject
    + build.gradle
    + settings.gradle
    + app/
      + build.gradle
      + src/

2) 像往常一样,重构模块名称(在AndroidStudio中右键单击模块)-

  /MainProject
    + build.gradle
    + settings.gradle
    + MainModule/
      + build.gradle
      + src/

  /LibraryProject
    + build.gradle
    + settings.gradle
    + LibraryModule/
      + build.gradle
      + src/

3) 修改设置。主项目中的渐变

include ':LibraryModule', ':app'
project(':LibraryModule').projectDir = new File(settingsDir, '../LibraryProject/LibraryModule')

同步项目,您就完成了。

关于ProGuard的说明

目前,您不应在外部库项目/模块上使用proguard。而是替换以下内容(此处为原始答案)

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

使用以下内容(在库的build.gradle中):

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

其中proguard-project.txt是包含库项目的proGuard规则的文件。

 类似资料:
  • 问题内容: 我有多个具有相似构建步骤的项目,并且我正在研究在这些项目中重用Jenkinsfile管道。我很难找到有关如何实现这样的标准(我认为)设置的文档。 这是我的要求: 1)Jenkinsfile存储在回购中,在多个项目之间共享 2)每个项目都有其自己的参数:项目在仓库中的位置。 3)至少从用户角度来看,每个项目在Jenkins中都应独立,这意味着,例如,执行和日志可在Jenkins中的每个项

  • 我使用vert. x作为api网关将调用路由到下游服务。 到目前为止,我使用的是跨多个垂直链接共享的单个web客户端实例(通过GUI注入) 每个verticle都有自己的webclient有意义吗?它是否有助于提高性能?(我的每个网关实例运行64个Vericle,每秒处理大约1000个请求) 每种方法的优缺点是什么? 有人能帮忙找出同样的理想策略吗? 谢谢

  • Gradle项目中典型的静态编程语言配置是非常样板的,我正在寻找一种将其抽象成外部构建脚本的方法,以便可以重用。 我有一个可行的解决方案(见下文),但它感觉有点像黑客,因为kotlin gradle插件不是这样开箱即用的。 从外部脚本应用任何非标准插件都很麻烦,因为您无法通过id应用插件,即。 将导致找不到id为'kotlin'的 应用),您就可以开始运行kotlin开发了。 它是有效的,我还没有

  • 我有一个python项目,有很多其他项目。py文件,它从它的子文件夹和txt文件导入,以及我想分享这个项目,但只有作为一个可执行文件,这样没有人可以看到代码或文本文件等。。。如果没有,有什么方法可以这样做吗?我怎样才能在不让任何人检查项目代码的情况下共享项目。py文件

  • 问题内容: 说我有a.so和b.so。我是否可以将c.so生成为具有a和b导出的所有功能的单个共享库,当然可以解决所有内部依赖关系(即a.so调用的b.so的所有功能,反之亦然)? 我试过了 但这不起作用。 如果我在aa和ba中归档ao和bo(也不应修改ao和bo),也是如此 谢谢 问题答案: 除了AIX之外,在所有UNIXen上实际上都不可能将多个共享库合并为一个:链接器将.so视为“最终”产品

  • 可以合并多个共享Jenkins库吗? 例如,我有一个公共共享库:我的共享库(带有maven项目的git存储库)定义在包含一些作业的jenkins文件夹上。在该文件夹中运行的每个作业都可以使用Jenkins文件中的共享库,包括: 现在,我想创建另一个共享库:包含一些专门管道的my-专门化共享库(在另一个git存储库中,也作为maven项目)。我的专用共享库中的管道(groovy类、脚本等)应该能够使