gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-28 23:39:22 25 4
gpt4 key购买 nike

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

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

我尝试了 File->Import Project.. 但它不起作用。

编辑 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.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 )。继续剩下的步骤,创建一个普通的项目(由于这是一个库,所以我选择了“不添加 Activity ”)

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

3) 在 build.gradle 在您的库模块文件夹中,更改第一行

apply plugin: 'com.android.application'

apply plugin: 'com.android.library'

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

4)如果是新建项目,首先新建项目File->new Project->ApplicationName。

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

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

6) 然后转到文件->项目结构。

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

您现在应该可以在应用程序中使用库类了。


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

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

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

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

2) 像往常一样,将模块名称(在 android studio 中右键单击模块->重构->重命名)重构为不那么容易混淆的名称,例如

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

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

3) 修改settings.gradleMainProject :

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

同步项目,您就完成了。


Proguard注意事项

目前您不应该在外部库项目/模块上使用 proguard。相反,您替换以下内容(原始答案 here )

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 规则的文件。

关于android - 如何跨多个项目共享单个库源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22243269/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com