Плагин Cordova настроить класс приложения - PullRequest
0 голосов
/ 17 мая 2018

Я пытаюсь создать плагин Cordova для пользовательских SDK.Этот SDK использует Bluetooth и имеет две опции:

  1. Класс приложения должен расширять класс из SDK, чтобы я мог использовать все функции из SDK.
  2. Класс приложения должен реализовывать класс из SDK.Это необходимо для того, чтобы соединение Bluetooth оставалось живым.И после этого я могу запустить службу вручную.

Я думаю, что моя проблема в том, что мне нужно создать собственный класс приложения.

Можно ли сделать то, что мне нужно, сплагин Cordova?

1 Ответ

0 голосов
/ 18 мая 2018

Вы можете сделать это так в своем плагине:

plugin.xml * * 1004

<platform name="android">
    <source-file src="src/MyPlugin.java" target-dir="src/my/plugin" />
    <source-file src="src/MyApplication.java" target-dir="src/my/plugin" />
</platform>

<edit-config file="AndroidManifest.xml" target="/manifest/application" mode="merge">
    <application android:name="my.plugin.MyApplication" />
</edit-config>

MyApplication.java

package my.plugin;

import android.app.Application;
import android.util.Log;

public class MyApplication extends Application {
    @Override
    public void onCreate() {
        Log.d("MyApplication", "onCreate");
        super.onCreate();
    }
}

Однако я обнаружил, что блок <edit-config> был склонен к проблемам, когда плагин использовался в проекте с множеством других плагинов, поэтому я использовал скрипт-ловушку, чтобы добавить атрибут name к элементу <application> в AndroidManifest.xml * * 1014

В plugin.xml, заменить:

<edit-config file="AndroidManifest.xml" target="/manifest/application" mode="merge">
    <application android:name="my.plugin.MyApplication" />
</edit-config>

с:

<hook type="after_prepare" src="hooks/android_app_name.js" />

Затем внутри вашего каталога плагинов создайте hooks/android_app_name.js:

#!/usr/bin/env node

var APP_CLASS = 'my.plugin.MyApplication';

module.exports = function(context) {

  var fs = context.requireCordovaModule('fs'),
      path = context.requireCordovaModule('path');

  var platformRoot = path.join(context.opts.projectRoot, 'platforms/android');
  var manifestFile = path.join(platformRoot, 'AndroidManifest.xml');

  if (fs.existsSync(manifestFile)) {
    fs.readFile(manifestFile, 'utf8', function (err, data) {
      if (err) {
        throw new Error('Unable to find AndroidManifest.xml: ' + err);
      }

      if (data.indexOf(APP_CLASS) == -1) {
        var result = data.replace(/<application/g, '<application android:name="' + APP_CLASS + '"');
        fs.writeFile(manifestFile, result, 'utf8', function (err) {
          if (err) throw new Error('Unable to write AndroidManifest.xml: ' + err);
        })
      }
    });
  }

};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...