Ant*_*sto 5 android intellij-idea android-studio
我需要实现两个应用程序AppA并AppB使用相同的Android库LibC.
采用Android工作室,我的愿望是有三个项目:LibC,AppA,和AppB,与AppA和AppB参考LibC.我找不到获得这个的方法.
到目前为止我已经实施了AppA.写作的时候,AppA我创建了一个模块
File > New Module > Android Library > `LibC`
Run Code Online (Sandbox Code Playgroud)
该LibC库现在在AppA项目中,我需要在项目中开始使用它AppB.
如何LibC移出项目AppA并仅为其创建项目LibC?
我该如何创建一个只包含Android库的新项目?
如果我开始一个新的Android项目,它会不断创建一个新的应用程序.
这里的文件说:
1)我需要创建一个新的应用程序,然后在该应用程序中创建一个新模块(这是我写作时所做的
AppA);2)我可以将现有的库代码导入到一个新项目中.
但是我不想将库的代码复制到新项目中(这就是发生的事情),我想使用相同的文件来保留库的单个代码库.
这可能吗?如果是的话,我在哪里可以找到一些关于它的文档?
由于我最近自己的项目中有这个需求,我可能给你一些建议。
\n基本上,您的选择如下:
\n如果 AppA 和 AppB 在某种程度上相关(这是您必须决定的事情),您可以采用简单的方法。您的项目中已经有AppA和LibC,因此您只需在Studio中为AppB创建另一个App模块(文件>新建模块>应用程序模块)
\n您可能会有趣地看到,您的项目目录最初名为AppA,并且您的 AppA 模块名为app。这是因为 Android Studio 默认按照您在向导中提供的名称命名您的项目,而您的第一个模块始终命名为app。
\n您可以将包含的项目从AppA重命名为类似项目的名称(通过右键单击项目 > 重构 > 重命名,然后将应用程序模块重命名为AppA。
\n基本结构如下所示:
\nStudio Project AppA (rename to "project")\n|\n|\\_app (module AppA, rename to "AppA")\n| |_ src\n|\n|\\_AppB (module AppB)\n| |_ src\n|\n \\_LibC (module LibC, dependency for AppA and AppB)\n |_ src\nRun Code Online (Sandbox Code Playgroud)\n此设置的优点是它包含在一个 Android Studio 项目中,因此您可以免费获得应用程序模块和库之间的所有 Android Studio 重构魔法。
\n想象一下,您更改了 LibC 中的一个方法,它将同时反映在 AppA 和 AppB 中。
\n基本上,这反映了您对 AppA 和 AppB 拥有两个不同项目位置的想法- 没有 2 个物理 LibC 位置。只需获取 LibC (AppA) 并将其符号链接到新位置 (AppB)。
\n这不是一个漂亮的解决方案,但是是可能的(我只能说类似 Unix 的系统,但也应该适用于 Win。)
\nStudio Project AppA (location 1 on disk)\n|\n|\\_app\n| |_ src\n|\n \\_LibC (dependency for app)\n |_ src\n\n\xe2\x80\xa6 \n\nStudio Project AppB (location 2 on disk)\n|\n|\\_app\n| |_ src\n|\n \\_*LibC (symlinked from AppA project dir)\n |_ src\nRun Code Online (Sandbox Code Playgroud)\n请注意,在这种情况下,项目间重构将会失败,例如,您打开项目 AppA,在 LibC 中进行重大更改,然后运行 AppA。稍后您打开 AppB 并会遇到编译时失败,因为 AppB 尚未适应使用 LibC\xe2\x80\x99s 新 API。
\n这可以被认为是迄今为止最“专业”的方式。\n创建您的应用程序项目,它们不必像选项 1 那样位于同一项目树中,并将它们链接到库的内置工件LibC(aar 或 jar)。
\n理想情况下,该工件是版本化的并位于(本地)maven 存储库中。\n这样您始终拥有一致的构建(因为您链接到库的特定版本,无论 LibC 当前处于什么开发状态)
\nStudio Project AppA (location 1 on disk)\n|\n \\_app\n |_ src\n |_ build.gradle dependency on libc (jar/aar + version XX)\n\n\xe2\x80\xa6 \n\nStudio Project AppB (location 2 on disk)\n|\n|\n \\_app\n |_ src\n |_ build.gradle dependency on libc (jar/aar + version YY)\n\n\nStudio Project LibC (location 3 on disk)\n|\n \\_LibC (library module from AppA project dir)\n |_ src (in development)\nRun Code Online (Sandbox Code Playgroud)\n正如您所说,Android Studio 以某种方式强制您先创建应用程序模块,然后再创建库模块。我希望这种情况将来会改变,但这没什么大不了的。之后只需创建库模块,然后删除应用程序模块即可。然后,您可以通过 gradle 构建您的库并导出要在您的项目中使用的工件(aar 或 jar)。
\n在 LibC\xe2\x80\x99s build.gradle 中,您可能会找到类似的内容,将其部署到本地计算机\xe2\x80\x99s maven 存储库:
\napply plugin: \'maven\'\ngroup = \'your.groupid.artefactid\'\nversion = \'0.2.0\'\n\nuploadArchives {\n repositories {\n mavenDeployer {\n repository url: \'file://\' + new File(System.getProperty(\'user.home\'), \'.m2/repository\').absolutePath\n }\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n请参阅http://www.alonsoruibal.com/my-gradle-tips-and-tricks/以供参考。
\n如果您运行gradle uploadArchives,它会创建您的工件并将其推送到您的本地 Maven 存储库中。
还有另一种可能的解决方案,类似于选项 2。通过 gradle 从多个项目引用库作为文件引用,请参阅
\n\n此方法也具有选项 2 的缺点(没有多个 API 版本控制,重构时没有应用程序间同步)
\n希望基于个人经验的总结可以帮助您找到方向。
\n如果应用程序相关,我个人会选择选项 1,或者选择选项 3 (Maven)
\n| 归档时间: |
|
| 查看次数: |
1497 次 |
| 最近记录: |