Android 如何在Ionic Cordova构建中正确包含第三方AAR文件

Android 如何在Ionic Cordova构建中正确包含第三方AAR文件,android,cordova,ionic-framework,cordova-plugins,ionic4,Android,Cordova,Ionic Framework,Cordova Plugins,Ionic4,我正在使用Cordova 9.0.1和ionic 5.4.14 我使用plugman构建了一个自定义插件,并能够成功地添加它,并从我的爱奥尼亚项目中调用它,该项目使用的是爱奥尼亚cordova运行的android,通过展示祝酒词“干杯!”(明白了吗?) 所以现在我在安卓Java中工作,添加了一个第三方SDK,我正试图为它编写一个JavaScript桥 我的项目结构如下所示: MyProjectRoot -custom_plugins -MyCustomPlugin -src

我正在使用Cordova 9.0.1和ionic 5.4.14

我使用plugman构建了一个自定义插件,并能够成功地添加它,并从我的爱奥尼亚项目中调用它,该项目使用的是
爱奥尼亚cordova运行的android
,通过展示祝酒词“干杯!”(明白了吗?)

所以现在我在安卓Java中工作,添加了一个第三方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
为了清晰起见,项目的其余部分不包括在内,我相信这些是突出的部分

mypackage.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>
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;
 }
在尝试使用第三方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
我只是从大量的堆栈溢出和搜索引擎研究中得到了这一点


我还缺少什么知识?

对于其他遇到这些问题的人来说,以下是为我解决问题的变化:

  • 在custom_plugins/MyCustomPlugin/src/android目录中创建一个lib目录

  • 将aar文件移到那里

  • compile(名称:'3rdparty-sdk-4.1',分机:'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" />                                                   
    
    
    

  • 对于其他遇到此问题的人,以下是为我解决问题的更改:

  • 在custom_plugins/MyCustomPlugin/src/android目录中创建一个lib目录

  • 将aar文件移到那里

  • compile(名称:'3rdparty-sdk-4.1',分机:'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的建议,用这种形式的
    实现取代
    编译

    dependencies {
        implementation fileTree(include: ['*.aar'], dir: 'libs')
    }
    

    实际上对我有效的是,根据E.Manggini的建议,用这种形式的
    实现取代
    编译

    dependencies {
        implementation fileTree(include: ['*.aar'], dir: 'libs')
    }
    

    事实上,这有点半途而废。。。它允许我的项目完全编译,但在运行时,外部AAR中包含的类都不可用。最终解决这两个问题的是更改编译以实现:依赖项{implementation fileTree(include:['*.aar'],dir:'libs')}事实上,它工作了一半。。。它允许我的项目完全编译,但在运行时,外部AAR中包含的类都不可用。最终解决这两个问题的是更改编译以实现:依赖项{implementation fileTree(include:['*.aar'],dir:'libs')}