如何将第三方aar文件包含在Android React Native模块中?

14

我正在构建一个 Android 的 React Native 模块,我的代码需要从第三方 SDK 中导入类,该 SDK 以 aar 文件的形式提供。我应该如何将此文件打包到我的模块中?我尝试添加

allprojects {
    repositories {
        flatDir {
            dirs: 'libs'
        }
    }
}

dependencies {
    ... other deps ...
    compile (name:'my-external-lib', ext:'aar')
}
将这个 my-external-lib.aar 文件放到 libs/ 文件夹中,并将其添加到 build.gradle 文件中,但是在构建包含 react-native-my-module 的 MyApp React Native 应用程序时仍然出现错误。
* What went wrong:
A problem occurred configuring project ':app'.
> Could not resolve all dependencies for configuration 
':app:_developmentDebugApkCopy'.
   > Could not find :my-external-lib:.
     Required by:
         MyApp:app:unspecified > MyApp:react-native-my-module:unspecified

有什么建议吗?

7个回答

2
你所写的内容完全正确,但是你把它写在了错误的位置上。
你将代码写在了build.gradle(Project:project_name)中。
你需要在build.gradle(Module:app)文件中写入代码,并将.arr文件粘贴到项目的lib文件夹中。

即:
repositories {
  flatDir {
   dirs 'libs'
  }
}
dependencies {
   ...其他依赖...
   compile (name:'my-external-lib', ext:'aar')
}

2

看起来我已经自己解决了这个问题。

似乎你需要在主项目中定义repositories,以允许子项目定位它们的依赖关系。

将以下内容添加到主项目的build.gradle文件中:

repositories {
    flatDir {
        dirs: 'libs'
    }
}

解决了问题。

虽然我相信这不是包含具有依赖关系的子项目的正确方式,因为如果此库是来自npm的第三方库,你显然无法知道如何修改build.gradle文件。 那么,有人可以解释为什么这样做有效,并且正确的方法应该是什么吗?


嘿,我完全按照你的指示操作了,但仍然出现“在项目yyyyy中找不到路径为xxxx的项目”的错误。如果可能的话,您能分享一下您模块的结构吗? - Pushpendra

2
在你的模块的android/build.gradle文件中,你需要将.aar作为构建产物添加进去。
configurations.maybeCreate("default")
artifacts.add("default", file("NAME_OF_YOUR_FILE.aar"))

4
这应该放在build.gradle的哪个部分?是放在文件末尾吗? - Julien
1
@gtfargo,我尝试过了,但是aar中的类没有被解析。你是如何让它工作的? - Żabojad

0

0

尝试了很久,我终于搞定了 这是应该如何做的:

  1. 添加

    repositories {   flatDir {    dirs 'libs'   } }

到 project:grindle(不是 module.grindle) 和

  1. 将依赖项添加到 app:grindle(不是 module.grindle)

0

如果您正在尝试在React Native模块中使用第三方软件,则需要:

  1. 将aar文件添加到reactnativeModule/android/libs中

  2. 在reactnativeModule/android/build.gradle中添加以下内容:

    allprojects { repositories { flatDir { dirs: 'libs' } } }

  3. 在reactnativeModule/android/build.gradle中的dependencies中添加以下依赖:

    dependencies { implementation "com.facebook.react:react-native:${safeExtGet('reactnativeVersion', '+')}" of reactnativeModule/android/build.grindle


0
在你的settings.gradle文件中,你应该包含这个库,例如:
include ':app',  ':my-external-lib'

你可以像编译普通项目一样编译它,例如:compile project(':my-external-lib')

同时,你的my-external-lib build.gradle 应该像这样:

configurations.maybeCreate("default")
artifacts.add("default", file('my-external-lib.aar'))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接