【问题标题】:Linking an Android library that is on local machine链接本地机器上的 Android 库
【发布时间】:2020-05-14 20:29:45
【问题描述】:

我有一组实用程序和自定义小部件,我想将它们作为 Android 库从我的项目中提取出来,以便我可以在其他项目中使用它们(并可能在未来共享)。我创建了一个新的 Android Studio 项目并更改了 build.gradle 文件,以便 'com.android.application''com.android.library' 并删除了 applicationId。一切编译正常,我创建了一个 .aar 文件。

我现在想在我的原始项目中使用这个新库作为一个模块。当我执行Import Project 时,库项目中的所有文件都将复制到我的原始项目中。但我不希望这样,因为如果我更改导入的库代码,它不会反映在库项目中,反之亦然。

我也尝试将其添加到 settings.gradle:

include ':myutils'
project(':myutils').projectDir = new File(settingsDir, '../../../../Development/MyUtils/')

在原项目app build.gradle中:

dependencies {
    implementation project(':myutils')
...

但我收到此错误:

ERROR: Unable to resolve dependency for ':app@debugUnitTest/compileClasspath': Could not resolve project :myutils.
Show Details
Affected Modules: app

如何在不导入的情况下将库链接到我的项目?我宁愿不通过外部 Maven 回购。每当那里发生更改时,我很高兴(并且希望)重新编译我的库,然后重建我的原始项目。

提前谢谢你。

【问题讨论】:

标签: android android-library android-studio-3.0


【解决方案1】:

我想我也遇到了同样的问题 - 我想将库 .aar 文件放在本地驱动器上的某个位置,然后在新应用程序中使用它作为依赖项。我不想通过 repo 或将其包含在新应用程序的 libs 文件夹中。希望这是 OP 所要求的,以下内容可能对其他人有所帮助。

在 SO(2021 年 8 月)上搜索,大多数答案似乎比 Android Studio 提供的要复杂得多(在 4.2 版上测试)。也就是说,现在可以将位于 app 项目之外的 .aar 文件作为实现文件添加到 gradle 依赖项中。因此,它不必经过 repo,也不必包含在项目的 libs 文件夹中。

当前文档(2021 年 8 月)给出了一个相当简单的答案: https://developer.android.com/studio/projects/android-library#psd-add-aar-jar-dependency

简而言之,如果您已将 .aar 文件放在本地驱动器的某个位置,则可以通过以下方式将其作为实现文件添加到另一个应用项目中:

  1. 在 Android Studio 中,在您的新应用项目中,转到:文件 > 项目结构 > 依赖项。
  2. 在:模块 > 应用程序 > 声明的依赖项中,单击“+”并选择“Jar 依赖项”。 (即使您尝试使用 .aar 文件,您仍然选择“Jar Dependency”)。
  3. 在“添加 Jar/Aar 依赖项”弹出对话框中:
  • 在第 1 步中,输入本地驱动器上 .aar 文件的路径,然后
  • 在第 2 步中选择“实施”。

如果一切顺利,你的 build.gradle(Module) 应该在依赖项中有一行如下所示:

dependencies {
implementation files('../../../MyFolder/MyLibraryFile.aar') 

几点说明:

  • 实际上,您可以手动添加依赖项,将其键入到 build.gradle(Module) 依赖项中,因此您实际上不必通过上述 Android Studio 对话框。
  • 您可以使用相对路径(如上例)或绝对路径。
  • Android Studio 对话框有些限制,因为您不能只浏览到您的文件(在第 3 点,第 1 步中),而是必须手动输入路径。
  • 可能是最重要的:每当您在库中进行更改并组装新的 .aar 文件时,请记住在使用 .aar 文件作为依赖项的应用项目中执行以下操作:清理项目,然后同步项目使用 Gradle 文件,然后才运行应用程序,以便库中的更改可以在您的应用程序中生效。

【讨论】:

    【解决方案2】:

    我已经使用 Phgr 的上述技术四年了。我有三个 cmets -

    首先,我不会在每次更改库时清理应用项目 - 我只是在构建和测试应用之前执行一个同步项目。

    其次,我将 File-Settings-Keymap-Main Menu-File-Sync 更改为 Alt-S 以便于同步 - 我讨厌浪费时间使用鼠标选择 Sync 图标。

    第三,对于每个应用变体,我在应用的构建模块文件中都有一个实现行,如下所示 -

    debugImplementation files('c:/Android Studio Projects/PciLibrary/app/build/outputs/aar/PciLibrary-debug.aar')
    releaseImplementation files('c:/Android Studio Projects/PciLibrary/app/build/outputs/aar/PciLibrary-release.aar')
    

    所有这些都适用于 Android Studio 4.2.2 和 sdk 版本 30。

    希望这可以帮助其他人解决这个问题

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-22
      • 2019-05-28
      • 2015-09-28
      • 2014-10-15
      • 1970-01-01
      • 2014-09-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多