Как правильно включить сторонний файл AAR в сборку Ionic Cordova

Я работаю с Cordova 9.0.1 и ionic 5.4.14.

Я создал собственный плагин с помощью plugman и смог успешно добавить его и вызвать из моего ионного проекта с помощью ionic cordova run android, что подтверждается показом тоста, в котором говорилось: «Ура!» (возьми?)

Итак, теперь я работаю на 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

Остальная часть проекта не включена для ясности, я считаю, что это основные части.

Раздел Cordova моего package.json выглядит так:

"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;
  }
 }

Раздел android в файле plugin.xml выглядит следующим образом:

 <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;
 }

Прежде чем пытаться работать со сторонним 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

И я получил это далеко только от большого количества переполнения стека и исследований поисковых систем.

Каких знаний мне не хватает?


person E. Maggini    schedule 04.02.2020    source источник


Ответы (2)


Для всех, кто сталкивается с этим, вот изменения, которые исправили ситуацию для меня:

  1. создайте каталог lib в каталоге custom_plugins/MyCustomPlugin/src/android

  2. Переместите файл aar туда

  3. Добавьте compile(name:'3rdparty-sdk-4.1', ext: 'aar') в раздел зависимостей файла build.gradle.

  4. Добавьте следующие строки в раздел android файла plugin.xml.

     <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" />                                                   
    
person E. Maggini    schedule 08.02.2020
comment
На самом деле это сработало наполовину... это позволило моему проекту полностью скомпилироваться, но затем, во время выполнения, ни один из классов, включенных во внешний AAR, был недоступен. Что, наконец, решило обе проблемы, так это изменение компиляции для реализации: - person VictorEspina; 19.01.2021

Что действительно сработало для меня, так это, основываясь на рекомендации Э. Манджини, заменить compile на эту форму implementation:

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