【问题标题】:Replacing a gradle dependency in Flutter library替换 Flutter 库中的 gradle 依赖项
【发布时间】:2021-09-14 20:56:33
【问题描述】:

我正在编写一个使用“flutter_reactive_ble”插件的 Flutter 应用程序。反过来,该插件使用“RxAndroidBle”java 库。我对 RxAndroidBle 做了一个小改动,它会编译成 .aar 文件。但是我的 Gradle-fu 不足以弄清楚如何告诉 flutter_reactive_ble 使用我的版本,而不是从网上检索最新版本。如果我可以只指向我的本地 .aar 文件,我会很高兴,但如果我必须从自己的站点提供它们,那也可以。

构建我的应用后,“android/app/build.gradle”文件以:

结尾
dependencies {
    . . .
    implementation "com.polidea.rxandroidble2:rxandroidble:1.11.1"
}

我认为这是我需要更改的地方,但我在 Gradle 文档中找不到的东西看起来像我需要的。

【问题讨论】:

  • 您可以出售该软件包并更改其 gradle 中的依赖项
  • 是的,我就是这么说的。我只是无法弄清楚如何——我不是一个 gradle 人,而且这些文件难以理解。
  • 如果你 fork 存储库并更改插件本身中的依赖关系 here,它应该可以工作
  • 好的,fork repo 没问题,但是这个文件中的依赖行说“implementation 'com.polidea.rxandroidble2:rxandroidble:1.12.1”,我认为它仍然必须,因为代码即使在我的网站上仍然是“com.polidea ...”包。我如何告诉 gradle 从 github.com/lcrocker/RxAndroidBle 实际获取它?

标签: android flutter gradle


【解决方案1】:

我想,你需要先 fork repo

而 .yaml 设置是这样的 (read this)

【讨论】:

  • 感谢您的尝试,但 flutter_reactive_ble 一个插件,并且没有 pubspec.yaml。对 rxandroidble 的依赖隐藏在 build.gradle 的子目录中。
  • 这意味着您的应用程序 .yaml,请按照以下步骤操作 1. 分叉 flutter_reactive_ble 2. 将您的 .arr 设置为在您的分叉 flutter_reactive_ble 存储库中 gradle 3. 将您分叉的 flutter_reactive_ble 存储库添加到您的根应用程序 .yaml 中跨度>
  • 没错。这是我正在尝试做的第 2 步。我已阅读文档并尝试了不同的方法,但无法做到。在构建 .aar 文件所在的任何阶段(我可以找到)的任何构建阶段,flutter_reactive_ble 存储库中都没有位置。如果有,我会更换它——这是我尝试的第一件事。我什至尝试在系统缓存中查找它。在 flutter_reactive_ble 中对它的唯一引用是子项目中的 gradle.build 文件。显然,我需要找一个 gradle 人来修复那个文件。
  • 您要查找的文件位于github.com/PhilipsHue/flutter_reactive_ble/blob/master/packages/… 我认为@Taz 是对的,您将不得不分叉整个项目并更改所需的位(参见上面的路径)。
【解决方案2】:

我认为你可以在 gradle 中做这样的事情:

configurations.each {
    c -> c.resolutionStrategy.dependencySubstitution {
        all { DependencySubstitution dependency ->
            if (dependency.requested.group == 'com.polidea') {
                dependency.useTarget '<your grade plugin>'
            }
        }
    }
}

【讨论】:

  • 不知道你想让我为“”填写什么。 AAR 文件?我已经分叉了回购——我应该在代码中的任何地方用我的域替换“com.polidea”吗?然后我仍然不知道 Gradle 是如何查找它的——我必须将它上传到 Maven 还是可以指向 Github?我已经编程了 40 年,我确信我完全有能力做任何必要的事情,我只是不想或不需要花一个月的时间来为一个项目学习 Gradle。
【解决方案3】:

可以这样替换:

configurations.all {
    exclude group: 'com.polidea.rxandroidble2', module: 'rxandroidble'
}

dependencies {
    implementation files('libs/rxandroidble.aar')
    // or depend on the module.
}

【讨论】:

  • 构建并运行,但似乎没有使用我的 AAR(它没有显示我添加的日志)。可能有其他事情在路上......我会继续努力。
【解决方案4】:

如果您希望您的应用使用您的 aar,那么只需将其声明为依赖项。或者你想让flutter_reactive_ble使用它?我不认为这是可能的。您必须将 pr 设置为 RxAndroidBle,然后将 pr 设置为 flutter_reactive_ble 以获取该版本。

【讨论】:

    【解决方案5】:

    我认为覆盖 android 依赖可能会解决您的问题。

    in build.gradle file of android project
    
    configurations.all {
       resolutionStrategy {
          force ‘<android library with specific version>’
       }
    }
    

    在你的情况下:

    force com.polidea.rxandroidble2:rxandroidble:1.11.1
    

    查看此链接以获取more detail

    --------

    用于添加本地项目的依赖

    在您的 settings.gradle 文件中添加本地项目的映射并包含它

    project(':local_project_name').projectDir = new File(settingsDir, '<relative path of project>')
    
    include ':local_project_name'
    

    然后在你项目的 build.gradle 文件中添加一个 resolutionStrategy

    configurations.all {
            resolutionStrategy {
                force implementation project(':local_project_name')
            }
        }
    

    【讨论】:

    • polidea 的版本是我不想使用的版本——我想使用我在本地驱动器上编译的版本。
    • 请尝试我更新的答案。
    【解决方案6】:

    你需要 fork flutter_reactive_ble,转到build.gradle 并删除this line 然后打开android studio 并打开 File &gt; Project Structure &gt; Dependencies

    然后添加您的模块库(您构建的.aar 文件):

    最后,android studio 会将这一行添加到build.gradle:

    implementation(project(path: ":example-library"))
    

    确保在应用内的 git 存储库中使用 flutter_reactive_ble,在 .yaml 文件中添加:

      flutter_reactive_ble:
        git:
          url: your/git/flutter_reactive_ble/repository/url
          ref: tag or commit id 
    

    【讨论】:

    • 谢谢,我试试这个。实际上,我最终为了获取代码所做的实际上是将更新的 AAR 复制到本地 Gradle 缓存中,然后再构建下一阶段。丑陋,但它有效。
    猜你喜欢
    • 2022-08-16
    • 1970-01-01
    • 2016-07-05
    • 1970-01-01
    • 2015-08-19
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多