gpt4 book ai didi

安卓工作室 : using Android Modules without duplicating code

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:44:09 27 4
gpt4 key购买 nike

我需要实现两个使用相同 Android 库 LibC 的应用程序 AppAAppB

使用Android Studio,我希望拥有三个项目:LibCAppAAppB,其中AppAAppB 引用 LibC。我找不到获得它的方法。

到目前为止,我已经实现了AppA。在编写 AppA 时,我通过

创建了一个模块
File > New Module > Android Library > `LibC`

LibC 库现在位于 AppA 项目中,我需要在 AppB 项目中开始使用它。

问题一:

如何将 LibC 移出项目 AppA 并仅为 LibC 创建一个项目?

问题2:

我应该如何创建一个仅包含 Android 库的新项目?

如果我开始一个新的 Android 项目,它会不断创建一个新的应用程序。

The doc here说:

1) that I need to create a new Application and then a new module within that application (which is what I did while writing AppA);

2) that I can import existing library code into a new project.

但是我不想将库的代码复制到新项目中(这是发生了什么),我想使用相同文件以便为库保留单一代码库。

这可能吗?如果是,我在哪里可以找到有关它的文档?

最佳答案

由于最近在自己的项目中有这个需求,我可能会提供一些建议。

基本上这里是您的选择:

1。具有不同模块的单个项目

如果 AppA 和 AppB 在某种程度上相关(这是您必须决定的事情),您可以采用简单的方法。你的项目中已经有了AppA和LibC,所以你只需要在Studio中为AppB再创建一个App模块(File > New module > Application module)

您可能会发现有趣的是,您的项目目录最初的名称为 AppA,而您的 AppA 模块名为 app。这是因为 Android Studio 默认以您在向导中提供的名称命名您的项目,而您的第一个模块始终命名为 app

您可以将包含的项目从 AppA 重命名为类似project 的名称(通过右键单击项目 > Refactor > rename,然后重命名app 模块到 AppA

基本结构如下所示:

Studio Project AppA (rename to "project")
|
|\_app (module AppA, rename to "AppA")
| |_ src
|
|\_AppB (module AppB)
| |_ src
|
\_LibC (module LibC, dependency for AppA and AppB)
|_ src

此设置的优点是它包含在一个 Android Studio 项目中,因此您可以免费获得应用模块和库之间的所有 Android Studio 重构魔法。

想象一下,您在 LibC 中更改了一个方法,它会同时反射(reflect)在 AppA 和 AppB 中。

2。不同的项目,库符号链接(symbolic link)

基本上这反射(reflect)了您对 AppA 和 AppB 有两个不同项目位置的想法 - 而没有 2 个物理 LibC 位置。只需获取 LibC (AppA) 并将其符号链接(symbolic link)到新位置 (AppB)。

不是一个漂亮的解决方案,但可能(我只能说 Unix 类系统,但也应该适用于 Win。)

Studio Project AppA (location 1 on disk)
|
|\_app
| |_ src
|
\_LibC (dependency for app)
|_ src



Studio Project AppB (location 2 on disk)
|
|\_app
| |_ src
|
\_*LibC (symlinked from AppA project dir)
|_ src

请注意,在这种情况下,项目间重构将失败,例如您打开项目 AppA,在 LibC 中进行大量更改,然后运行 ​​AppA。稍后您打开 AppB 并将遇到编译时失败,因为 AppB 尚未调整为使用 LibC 的新 API。

3。作为外部依赖 Artifact 的库

这可以被认为是迄今为止最“专业”的方式。创建您的 App 项目,它们不必像选项 1 中那样位于同一项目树中,并将它们链接到您的库 LibC(aar 或 jar)的构建 Artifact 。

理想情况下,这个 Artifact 是版本化的并且位于(本地)maven 存储库中。这样你总是有一个一致的构建(因为你链接到你的库的特定版本,不管 LibC 当前处于什么开发状态)

Studio Project AppA (location 1 on disk)
|
\_app
|_ src
|_ build.gradle dependency on libc (jar/aar + version XX)



Studio Project AppB (location 2 on disk)
|
|
\_app
|_ src
|_ build.gradle dependency on libc (jar/aar + version YY)


Studio Project LibC (location 3 on disk)
|
\_LibC (library module from AppA project dir)
|_ src (in development)

如您所说,Android Studio 会以某种方式强制您先创建应用模块,然后才能创建库模块。我希望这会在未来的任何时候改变,但这没什么大不了的。之后只需创建您的库模块,并摆脱应用程序模块。然后,您可以通过 gradle 构建您的库并导出 Artifact (aar 或 jar)以用于您的项目。

在 LibC 的 build.gradle 中,您可能会找到类似这样的东西,将其部署到本地机器的 maven 存储库:

apply plugin: 'maven'
group = 'your.groupid.artefactid'
version = '0.2.0'

uploadArchives {
repositories {
mavenDeployer {
repository url: 'file://' + new File(System.getProperty('user.home'), '.m2/repository').absolutePath
}
}
}

参见 http://www.alonsoruibal.com/my-gradle-tips-and-tricks/供引用。

如果您运行 gradle uploadArchives,它会创建您的 Artifact 并将其推送到您的本地 Maven 存储库中。

[编辑]

还有另一种可能的解决方案,类似于选项 2。通过 gradle 从多个项目中引用库作为文件引用,请参阅

https://stackoverflow.com/a/21021293/1128600

此方法也有选项 2 的缺点(没有多个 API 版本控制,重构时没有应用程序间同步)

希望基于个人经验的总结能帮助你找到方向。

如果应用程序相关,我个人会选择选项 1,或者选项 3 (Maven)

关于安卓工作室 : using Android Modules without duplicating code,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28528328/

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