我已经开始研究一个项目,我需要在一堆应用程序中共享一堆Java
个类。在Eclipse
中,可以使用所有这些类创建一个项目,并将其用作包含所有依赖项目的工作空间中的库,但在Android Studio
中似乎不可能这样做(At最不容易)。
我一直在阅读大量帖子,其中很多都建议设置一个库项目,生成一个aar
文件,然后在我的项目中使用它。但是,据我了解,这将使我的图书馆开源(我是对的吗?),我不想要。我正在为客户端做这个,我希望代码库是私有的。
另外,我知道可以将模块导入到新项目中。但这会创建原始模块的COPY。这不是我想要的。我不想保留相同类的多个副本,这完全违背了“代码共享”的目的。
有没有什么好方法可以实现我想要的东西?任何帮助表示赞赏。
答案 0 :(得分:7)
您有两种不同的选择。
一种选择是将您的库维护为单独的项目,并将它们编译为存档格式,例如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 vs. CI服务器),这不是一件好事。
答案 1 :(得分:2)
您需要在eclipse项目中将其视为Android Studio / IntelliJ Idea模块。然后,您可以生成android(或java)库,然后将它们包含在您的项目中。
要将Android Studio模块标记为库,您可以转到文件 - > 项目结构 - > Facets 然后点击图书馆模块
答案 2 :(得分:0)
您当然可以创建和使用库,而无需使其成为开源或可供其他人使用。
首先,除非它包含资源,否则您不需要将其变为aar。 如果它只是普通的类,你可以把它变成一个.jar文件。
无论哪种方式,共享这些库(aar或jar)的最简单方法是设置自己的存储库。 Nexus和Artifactory是两个最常见的存储库管理器。
您将库保留在自己的项目中,然后将其发布到您自己的内部存储库中。
然后,需要使用库的项目(在gradle中)配置为使用内部存储库,并从中获取库。
答案 3 :(得分:0)
我和你的情况相同,我使用git创建了一种方法。 要做的步骤,有图书馆:
modulename.iml
档案.gitignore
modulename.iml
除外。就是这样。
现在,无论您是在家还是在工作,您都可以在多个项目中使用库。完成工作后不要忘记推动库更改。打开新的后拉他们。 我想你可以以某种方式自动化这个东西。
好处是您不需要构建任何jar或aar。