android - Android Studio 中的代码分享

标签 android maven android-studio android-gradle-plugin android-library

我已经开始从事一个项目,我需要在多个应用程序之间共享一组 Java 类。在 Eclipse 中,可以创建一个包含所有此类类的项目,并将其用作包含所有依赖项目的工作区中的库,但在 Android Studio 中则不行似乎有可能这样做(至少不容易)。

我已经阅读了很多帖子,其中很多建议设置一个库项目,生成一个 aar 文件,然后在我的项目中使用它。但是,据我了解,这将使我的图书馆开源(我说得对吗?),这是我不想要的。我正在为客户做这件事,我希望代码库是私有(private)的。

此外,我知道可以将模块导入到新项目中。但这会创建原始模块的副本。这根本不是我想要的。我不想维护相同类的多个副本,这完全违背了“代码共享”的目的。

有什么好的方法可以实现我的目标吗?感谢您的帮助。

最佳答案

您有几个不同的选择。

一种选择是将您的库作为单独的项目进行维护,并将它们编译为存档格式,例如 JAR 或 AAR; JAR 文件用于纯 Java 库,AAR 用于 Android 库(包含访问 Android API 和/或具有 Android 资源的代码)。正如评论中所指出的那样,AAR 并不像 JAR 文件那样强制您向世界发布您的代码;它只是一种存档文件格式,其文件可以位于您的机器或组织的本地。

有了这个存档文件,您就可以将它包含在其他项目中。如果您是多开发人员组织的一员,您可能会发现使用存储库管理器在您的组织内发布和维护这些库很方便,并且您可以使用 Maven 坐标样式规范来包含您项目中的库,您无需手动将其复制到您的开发机器上。

这种方法的缺点是它使更改这些库变得有点困难:您需要加载项目、进行更改、构建存档并分发存档。

另一种方法是像在 Eclipse 中那样将库作为源模块保存。您观察到如果您通过 UI 导入模块,Android Studio 会复制该模块,但是如果您绕过 UI 并直接修改构建脚本,您可以做您想做的事情,即就地使用模块并共享多个项目之间的单个副本。为此,请在您的 settings.gradle 文件中添加以下内容:

include ':module_name'
project(':module_name').projectDir = new File(settingsDir, '../relative/path/to/module')

我强烈建议您不要在这里使用纯相对路径;在此示例中,路径锚定到 Gradle 提供的 settingsDir 变量,该变量被定义为找到 settings.gradle 的目录。如果你使用纯相对路径(即没有锚定到任何东西),你依赖于在运行构建文件的所有环境中相同的工作目录(命令行与 Android Studio 与 CI 服务器),假设这不是一件好事。

关于android - Android Studio 中的代码分享,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27445138/

相关文章:

java - 启用和禁用 RecyclerView 的外观

android - 低 android 存储会影响应用程序的性能吗?

java - Maven 存储库包含错误的 cglib 源 jar

android - 在 Dagger `@Provides` 类中查找并删除未使用的 `@Module`

java - ViewPager内部 fragment 返回父 fragment 时不显示

android - 我可以让 Android Studio 立即显示错误,就像 Eclipse 过去那样吗?

android - iOS 和 Android 的 OpenGL ES 区别

android - 每次执行docker run ./gradlew命令时,它都会下载所有gradle文件和依赖项。如何仅下载和安装一次?

java - exec-maven-plugin exec :java failing: Cannot assign configuration values to array of type java. lang.String

java - Elasticsearch java 客户端初始化失败