如何在 Ionic Cordova 构建中正确包含第 3 方 AAR 文件
How to correctly include 3rd party AAR file in Ionic Cordova build
我正在使用 Cordova 9.0.1 和 ionic 5.4.14
我使用 plugman 构建了一个自定义插件,并且能够成功添加它并使用 ionic cordova run android
从我的离子项目中调用它,通过显示 "cheers!" 的 toast 进行验证(明白了吗?)
所以现在我在 Android Java 中工作,添加了一个第 3 方 SDK,我正在尝试为其编写一个 JavaScript 桥。
我的项目结构如下:
MyProjectRoot
-custom_plugins
-MyCustomPlugin
-src
-android
3rdPartySDK.aar
mycustomplugin.gradle
MyCustom.java
-www
MyCustom.js
package.json
plugin.xml
-src
USUAL-WEB-APP-STUFF-HERE
ionic.config.json
package.json
为清楚起见,项目的其余部分未包括在内,我相信这些是重要的部分。
我的 package.json 的 Cordova 部分看起来像:
"cordova": {
"plugins": {
"cordova-plugin-whitelist": {},
"cordova-plugin-statusbar": {},
"cordova-plugin-device": {},
"cordova-plugin-splashscreen": {},
"cordova-plugin-ionic-webview": {
"ANDROID_SUPPORT_ANNOTATIONS_VERSION": "27.+"
},
"cordova-plugin-ionic-keyboard": {},
"cordova-plugin-mycustomplugin": {}
},
"platforms": [
"android"
]
}
我在 mycustomplugin.gradle 添加了以下内容:
dependencies {
compile(name:'3rdPartySDK', ext: 'aar') {
transitive = true;
}
}
plugin.xml 的 android 部分如下所示:
<platform name="android">
<source-file src="src/android/MyCustom.java"
target-dir="src/cordova-plugin-mycustomplugin/MyCustomPlugin"/>
<config-file parent="/*" target="res/xml/config.xml">
<feature name="MyCustomPlugin">
<param name="android-package" value="cordova.plugin.mycustomplugin.MyCustomPlugin"/>
</feature>
</config-file>
<framework custom="true" src="src/android/mycustomplugin.gradle" type="gradleReference" />
<lib-file src="src/android/3rdPartySDK.aar"/>
</platform>
我的 Java 文件看起来像这样:
package cordova.plugin.mycustomplugin;
import com.3rd.party.sdk.MobileAPI;
import org.apache.cordova.CordovaPlugin;
import org.apache.cordova.CallbackContext;
public class MyCustom extends CordovaPlugin {
@Override
public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
if (action.equals("initSDK")) {
try {
MobileAPI mobileAPI = MobileAPI.getInstance(cordova.getActivity().getApplicationContext());
mobileAPI.destroy();
mobileAPI.initSDK(2);
}catch (Exception e) {
e.printStackTrace();
}
}
return false;
}
在尝试使用第 3 方 SDK 之前,ionic cordova run android
按预期工作。
现在,cordova.cmd build android
步骤失败并显示消息:
Could not resolve all files for configuration ':app:debugCompileClasspath'.
> Could not find :3rdPartySDK:.
Required by:
FAILED
project :app
而且我对 Stack Overflow 和搜索引擎的大量研究只得到这么多。
我缺少什么知识?
对于其他人 运行 这里是为我解决问题的更改:
在custom_plugins/MyCustomPlugin/src/android目录下创建lib目录
将aar文件移到那里
将 compile(name:'3rdparty-sdk-4.1', ext: 'aar')
添加到 build.gradle 文件的依赖项部分
将以下行添加到 plugin.xml
的 android 部分
<source-file src="src/android/libs/3rdparty-sdk-4.1.aar" target-dir="libs"></source-file>
<framework custom="true" src="src/android/build.gradle" type="gradleReference" />
实际对我有用的是,根据 E. Manggini 的推荐,将 compile
替换为 implementation
的这种形式:
dependencies {
implementation fileTree(include: ['*.aar'], dir: 'libs')
}
我正在使用 Cordova 9.0.1 和 ionic 5.4.14
我使用 plugman 构建了一个自定义插件,并且能够成功添加它并使用 ionic cordova run android
从我的离子项目中调用它,通过显示 "cheers!" 的 toast 进行验证(明白了吗?)
所以现在我在 Android Java 中工作,添加了一个第 3 方 SDK,我正在尝试为其编写一个 JavaScript 桥。
我的项目结构如下:
MyProjectRoot
-custom_plugins
-MyCustomPlugin
-src
-android
3rdPartySDK.aar
mycustomplugin.gradle
MyCustom.java
-www
MyCustom.js
package.json
plugin.xml
-src
USUAL-WEB-APP-STUFF-HERE
ionic.config.json
package.json
为清楚起见,项目的其余部分未包括在内,我相信这些是重要的部分。
我的 package.json 的 Cordova 部分看起来像:
"cordova": {
"plugins": {
"cordova-plugin-whitelist": {},
"cordova-plugin-statusbar": {},
"cordova-plugin-device": {},
"cordova-plugin-splashscreen": {},
"cordova-plugin-ionic-webview": {
"ANDROID_SUPPORT_ANNOTATIONS_VERSION": "27.+"
},
"cordova-plugin-ionic-keyboard": {},
"cordova-plugin-mycustomplugin": {}
},
"platforms": [
"android"
]
}
我在 mycustomplugin.gradle 添加了以下内容:
dependencies {
compile(name:'3rdPartySDK', ext: 'aar') {
transitive = true;
}
}
plugin.xml 的 android 部分如下所示:
<platform name="android">
<source-file src="src/android/MyCustom.java"
target-dir="src/cordova-plugin-mycustomplugin/MyCustomPlugin"/>
<config-file parent="/*" target="res/xml/config.xml">
<feature name="MyCustomPlugin">
<param name="android-package" value="cordova.plugin.mycustomplugin.MyCustomPlugin"/>
</feature>
</config-file>
<framework custom="true" src="src/android/mycustomplugin.gradle" type="gradleReference" />
<lib-file src="src/android/3rdPartySDK.aar"/>
</platform>
我的 Java 文件看起来像这样:
package cordova.plugin.mycustomplugin;
import com.3rd.party.sdk.MobileAPI;
import org.apache.cordova.CordovaPlugin;
import org.apache.cordova.CallbackContext;
public class MyCustom extends CordovaPlugin {
@Override
public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
if (action.equals("initSDK")) {
try {
MobileAPI mobileAPI = MobileAPI.getInstance(cordova.getActivity().getApplicationContext());
mobileAPI.destroy();
mobileAPI.initSDK(2);
}catch (Exception e) {
e.printStackTrace();
}
}
return false;
}
在尝试使用第 3 方 SDK 之前,ionic cordova run android
按预期工作。
现在,cordova.cmd build android
步骤失败并显示消息:
Could not resolve all files for configuration ':app:debugCompileClasspath'.
> Could not find :3rdPartySDK:.
Required by:
FAILED
project :app
而且我对 Stack Overflow 和搜索引擎的大量研究只得到这么多。
我缺少什么知识?
对于其他人 运行 这里是为我解决问题的更改:
在custom_plugins/MyCustomPlugin/src/android目录下创建lib目录
将aar文件移到那里
将
compile(name:'3rdparty-sdk-4.1', ext: 'aar')
添加到 build.gradle 文件的依赖项部分将以下行添加到 plugin.xml
的 android 部分<source-file src="src/android/libs/3rdparty-sdk-4.1.aar" target-dir="libs"></source-file> <framework custom="true" src="src/android/build.gradle" type="gradleReference" />
实际对我有用的是,根据 E. Manggini 的推荐,将 compile
替换为 implementation
的这种形式:
dependencies {
implementation fileTree(include: ['*.aar'], dir: 'libs')
}