本篇主题: 在 flutter 插件中引入 aarandroid
本篇只包含 android 部分, iOS 的 framework 直接在 podspec 中引入就能够了,因此本篇略过不表git
作过安卓开发的朋友可能知道, aar 文件若是做为本地文件直接引入 library, 而后 app 引用 library 是会报找不到aar的, 须要在 app 中使用 flatDir 进行引入, 这种方式的缺点在于, 你必须在每一个项目去配置, 颇有侵入性github
熟悉 flutter 插件开发的朋友都知道,在咱们开发 flutter 插件时, 插件是以 library module 的形式引入到项目中的apache
这时若是 sdk 方对于安卓只提供了 aar, 在这种大前提下,咱们有以下几种方法:api
本篇就使用这种本地 maven 仓库的方案来作bash
第一步确定是建立一个 flutter 插件闭包
flutter create -t plugin example_for_flutter_plugin_local_maven
复制代码
我这里用蒲公英的的 aar 举例:app
下载下来放在 android 目录下maven
在插件的 android 目录下建立一个文件夹,把 aar 放进去, 我这里取名为 aar
mkdir android/aar
cd android/aar
wget https://github.com/Pgyer/mvn_repo_pgyer/blob/master/com/pgyersdk/sdk/3.0.9/sdk-3.0.9.aar?raw=true #下载
mv sdk-3.0.9.aar?raw=true sdk.aar #更名
复制代码
$ brew install maven
便可, 其余系统自行搜索 maven 安装$ mvn -v
mvn deploy:deploy-file -Dfile=sdk.aar -Durl="file://." # 这步会报错
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy-file (default-cli) on project standalone-pom: The artifact information is incomplete or not valid:
[ERROR] [0] 'groupId' is missing.
[ERROR] [1] 'artifactId' is missing.
[ERROR] [2] 'version' is missing.
[ERROR]
[ERROR] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
复制代码
这里-Dfile 指向 aar 文件, url 指向目标地址, 我这里由于要部署在 aar 文件夹里, 因此直接用.表明当前文件夹, 它提示我缺乏 3 个东西, 组名,品名,版本号
mvn deploy:deploy-file -Dfile=sdk.aar -Durl="file://." -DgroupId="com.pgyer" -DartifactId="sdk" -Dversion="3.0.9"
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------< org.apache.maven:standalone-pom >-------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] --------------------------------[ pom ]---------------------------------
[INFO]
[INFO] --- maven-deploy-plugin:2.7:deploy-file (default-cli) @ standalone-pom ---
Uploading to remote-repository: file://./com/pgyer/sdk/3.0.9/sdk-3.0.9.aar
Uploaded to remote-repository: file://./com/pgyer/sdk/3.0.9/sdk-3.0.9.aar (134 kB at 3.3 MB/s)
Uploading to remote-repository: file://./com/pgyer/sdk/3.0.9/sdk-3.0.9.pom
Uploaded to remote-repository: file://./com/pgyer/sdk/3.0.9/sdk-3.0.9.pom (415 B at 208 kB/s)
Downloading from remote-repository: file://./com/pgyer/sdk/maven-metadata.xml
Downloaded from remote-repository: file://./com/pgyer/sdk/maven-metadata.xml (292 B at 32 kB/s)
Uploading to remote-repository: file://./com/pgyer/sdk/maven-metadata.xml
Uploaded to remote-repository: file://./com/pgyer/sdk/maven-metadata.xml (292 B at 146 kB/s)
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.407 s
[INFO] Finished at: 2020-03-30T16:00:25+08:00
[INFO] ------------------------------------------------------------------------
复制代码
这样就 ok 了, 全部文件都生成了
tree .
.
├── com
│ └── pgyer
│ └── sdk
│ ├── 3.0.9
│ │ ├── sdk-3.0.9.aar
│ │ ├── sdk-3.0.9.aar.md5
│ │ ├── sdk-3.0.9.aar.sha1
│ │ ├── sdk-3.0.9.pom
│ │ ├── sdk-3.0.9.pom.md5
│ │ └── sdk-3.0.9.pom.sha1
│ ├── maven-metadata.xml
│ ├── maven-metadata.xml.md5
│ └── maven-metadata.xml.sha1
└── sdk.aar
复制代码
这是标准的 maven 目录结构
这时候 sdk.aar 就没用了, 能够删除
用 studio 打开项目 example/android
// 定义一个方法, 用于获取当前moudle的dir
def getCurrentProjectDir() {
String result = ""
rootProject.allprojects { project ->
if (project.properties.get("identityPath").toString() == ":example_for_flutter_plugin_local_maven") { // 这里是flutter的约定, 插件的module名是插件名, :是gradle的约定. project前加:
result = project.properties.get("projectDir").toString()
}
}
return result
}
rootProject.allprojects {
// 这个闭包是循环全部project, 咱们让这个仓库能够被全部module找到
def dir = getCurrentProjectDir()
repositories {
google()
jcenter()
maven { // 添加这个指向本地的仓库目录
url "$dir/aar"
}
}
}
dependencies {
implementation "com.pgyer:sdk:3.0.9" // 添加这个, 接着点sync project with gradle file 刷新一下项目就能够了. 是使用api仍是implementation根据你的实际状况来看就行了
}
复制代码
本篇使用了 gradle 来完成了对主项目无侵入的方式配置 maven
这样主工程不管是任何项目能够引用到这个 aar 的内容, 固然这个方案也适用于非 flutter 项目
仓库地址: github
以上