我需要实现两个使用相同android库的应用程序。
使用android studio,我希望有三个项目:AppA
、AppB
和LibC
,其中LibC
和AppA
引用AppB
。我找不到办法得到这个。
到目前为止,我已经实现了AppA
。在编写AppB
时,我通过
File > New Module > Android Library > `LibC`
LibC
库现在位于AppA
项目中,我需要在AppA
项目中开始使用它。问题1:
如何将
LibC
移出projectAppA
并仅为AppB
创建项目?问题2:
我该如何创建一个只包含android库的新项目?
如果我启动一个新的android项目,它会不断地创建一个新的应用程序。
The doc here说:
1)我需要创建一个新的应用程序,然后在该应用程序中创建一个新模块(这就是我在编写
LibC
时所做的工作);2)我可以将现有的库代码导入到新项目中。
但是,我不想将库的代码复制到新项目中(这就是发生的情况),我想使用相同的文件来为库保留单个代码基。
这可能吗?如果是的话,我在哪能找到医生?
最佳答案
由于我最近在自己的项目中有这个要求,我可以给你一些建议。
基本上这是你的选择:
1。不同模块的单个项目
如果appa和appb有某种关联(这是你必须决定的事情),你可以走简单的路。您的项目中已经有appa和libc,因此只需要在studio中为appb创建另一个应用程序模块(文件>新模块>应用程序模块)
您可能会发现有趣的是,您的项目目录最初的名称是appa,而您的app模块的名称是app。这是因为android studio默认使用向导中提供的名称命名项目,而第一个模块总是命名为app。
您可以将包含的项目从appa重命名为类似于project的项目(右键单击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中更改了一个方法,它将同时反映在appa和appb中。
2。不同项目,库符号链接
基本上,这反映了您对于appa和appb有两个不同的项目位置的想法-没有两个物理libc位置。只需使用libc(appa)并将其符号链接到新位置(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
请注意,在这种情况下,项目间重构将失败,例如打开project appa,在libc中进行实质性更改,运行appa。稍后您打开appb,会得到编译时失败,因为appb还没有适应使用libc的新api。
三.库作为外部依赖人工制品
这可以被认为是迄今为止最“专业”的方式。
创建应用程序项目,它们不必像选项1那样位于同一个项目树中,并将它们链接到库libc(aar或jar)的构建构件上。
理想情况下,这个人工制品是版本化的,并位于(本地)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构建您的库,并导出用于项目的人工制品(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
,它将创建您的artefact并将其推送到本地maven存储库中。[编辑]
还有另一种可能的解决办法,类似于方案2。通过Gradle从多个项目中引用库作为文件引用,请参见
https://stackoverflow.com/a/21021293/1128600
此方法还有选项2的缺点(没有多个api版本控制,重构时没有应用程序间同步)
希望基于个人经验的总结能帮助你找到方向。
如果应用程序是相关的,我个人会选择1,或者选择3(maven)