Android Studio中的代码共享

Ram*_*ain 6 android maven android-library android-studio android-gradle-plugin

我已经开始研究一个项目,我需要Java在一堆应用程序中共享一堆类.在Eclipse其中可以创建一个包含所有这些类的项目,并将其用作工作空间中的库以及所有依赖项目,但在Android Studio其中似乎不可能这样做(至少不容易).

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

另外,我知道可以将模块导入到新项目中.但这会创建原始模块的COPY.这不是我想要的.我不想保留相同类的多个副本,这完全违背了"代码共享"的目的.

有没有什么好方法可以实现我想要的东西?任何帮助表示赞赏.

Sco*_*rta 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')
Run Code Online (Sandbox Code Playgroud)

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

  • @curioustechizen该路径与包含settings.gradle的目录无关,它与执行构建脚本时的工作目录相关.如果从命令行构建,则后者取决于您执行命令的位置,如果从Android Studio执行,则取决于IDE的想法.最好将其明确化. (2认同)