自定义方形Magstipe阅读器Ionic / Cordova插件“未找到类”

时间:2019-01-21 21:32:20

标签: android ionic-framework ionic3 cordova-plugins

我在一个正在进行的项目中遇到了一些麻烦,该项目涉及使用Android为Square Connect磁条读取器构建插件。之前,我已经为Ionic / Cordova构建了一个插件,并且我已经编辑了其他插件以使其更符合我的需求-但这个SDK简直就是一门怪兽。

首先,他们要求您扩展基本的Android Application类以统一SDK,因此将不会提供此代码,因为它直接来自于他们的SDK-但是,将其放入Ionic项目是一个挑战。我一直在使用此钩子,以便将扩展类放置在适当的位置

hook.js:

var APP_CLASS = 'SquareApplication';

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

据我所知,这个钩子应该使用扩展的应用程序名称来更改AndroidManifest中应用程序标签的android:name =“”变量。科尔多瓦目前有指向MainActivity的指针(因此该钩子无法按预期工作),但是我不确定是否要覆盖科尔多瓦的MainActivity!

好吧,如果我要移植所有正确构建的应用程序,则在构建时不会出现任何错误-但是,当我运行该应用程序时,用户登录SDK后应立即向Square授权。取而代之的是,我的日志中出现了一个可爱的“找不到类”错误-再加上明显缺少任何Android Log.d消息,这意味着Ionic / Cordova找不到插件!

所以我看看所有常见的地方。

plugin.xml:

<?xml version='1.0' encoding='utf-8'?>
<plugin id="catalpa-plugin-square-connect" version="0.0.1" xmlns="http://apache.org/cordova/ns/plugins/1.0" xmlns:android="http://schemas.android.com/apk/res/android">
    <name>Square Connect Plugin</name>
    <js-module name="SquareConnect" src="www/squareConnect.js">
        <clobbers target="cordova.plugins.SquareConnect" />
    </js-module>
    <platform name="android">
        <config-file parent="/widget" target="res/xml/config.xml">
            <feature name="catalpa-plugin-square-connect">
                <param name="android-package" value="com.catalpa.square"/>
            </feature>
        </config-file>
        <config-file target="app/src/main/AndroidManifest.xml" parent="/manifest">
            <uses-permission android:name="android.permission.BLUETOOTH" />
            <uses-permission android:name="android.permission.AUDIO" />
            <uses-permission android:name="android.permission.LOCATION" />
            <uses-permission android:name="android.permission.STORAGE" />
            <uses-permission android:name="android.permission.PHONE" />
        </config-file>

        <framework src="gradle.properties" custom="true" type="gradleReference"/>
        <framework src="build.gradle" custom="true" type="gradleReference" />

        <source-file src="src/android/SquareConnect.java" target-dir="src/com/catalpa/square/" />
        <source-file src="src/android/SquareApplication.java" target-dir="src/com/catalpa/square/" />
        <source-file src="src/android/CheckoutWrapper.java" target-dir="src/com/catalpa/square/" />
        <source-file src="src/android/AuthorizationWrapper.java" target-dir="src/com/catalpa/square/" />
    </platform>

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

具体地说,我开始看我在哪里声明js模块。名称是好,源目录是好,而问题就是我在应用程序中使用的东西。我检查了config.xml文件,以确保插件信息能够到达需要的地方,并且一切就在那里。

java文件位于其正确的目录中,并且在构建时没有出现任何构建错误或类丢失错误。我没有Java错误来指示缺少类,仅是从JS中获得,并且通常在找不到插件的情况下,因为我的plugin.xml尚未正确设置,但这应该就在所有地方。我能想到的唯一问题可能是挂钩未正确设置扩展应用程序文件,但我认为那会在Android控制台/ Java中引起错误,并且不会阻止Cordova调用插件本身。

只是转储其他一些相关文件,因为我迷失了方向,试图找出问题所在。

www / plugin.js

var exec = require('cordova/exec');

/*'use strict';

var SquareConnect = ( typeof SquareConnect === 'undefined' ? {} : SquareConnect );
var cordova = window.cordova || window.Cordova,
    fail = function(error) {
        console.log('Error running your request: ' + error);
    };*/


var PLUGIN_NAME = 'SquareConnect'; //'SquareConnect'

exports.authorize = function (success, error) {
    exec(success, error, PLUGIN_NAME, 'authorize', []);
};

exports.checkout = function (arg0, success, error) {
    exec(success, error, PLUGIN_NAME, 'checkout', [arg0]);
}

我尝试过的方法:对plugin.js文件和plugin.xml文件进行各种操作,然后通常进行测试构建,看到相同的“找不到类”错误,删除插件并再次从头开始。感谢您对我可能会缺少的任何帮助。

0 个答案:

没有答案