在适用于Android的Apache Cordova中访问C ++代码

玛拉基·威利

我正在使用Visual Studio 2015中的Apache Cordova开发针对Windows 10和Android的应用程序。后端逻辑将包含在c ++项目中,根据平台,希望将其编译为.so或.dll。

我已经对Android的Cordova插件进行了一些研究,但是还没有任何好的教程。连接这两个代码库需要做什么(在c ++和javascript方面)?

玛拉基·威利

经过更多研究和许多死胡同,我得以使我的C ++代码在Cordova上运行。我在这里回复是为了记录我的一些问题,并为其他尝试类似事情的人提供一些好的资源。

Cordova插件开发

一个很好的教程,比官方文档更好地解释了插件的每个部分:https : //blogs.oracle.com/mobile/entry/introduction_to_custom_cordova_plugin

我在这部分开发中遇到的最大问题是,VS 2015中的Cordova插件删除操作很糟糕,有时会在错误的位置查找文件。如果需要更改插件xml文件,请特别注意。

与C ++通讯

我使用VS将代码构建到.so共享库(新项目-> android共享库)中。确保在ARM中而不是x86或其他配置中构建它。将.so文件放在/ libs / armeabi中,以便.java文件可以使用loadLibrary()方法找到它。

这是我的.java文件,用于从库中加载和调用函数:

package com.example.plugin.cpp;

import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;

import org.apache.cordova.CordovaArgs;
import org.apache.cordova.CallbackContext;
import org.apache.cordova.CordovaPlugin;
import org.apache.cordova.CordovaWebView;
import org.apache.cordova.CordovaInterface;
import org.apache.cordova.PluginResult;

import org.json.JSONObject;
import org.json.JSONArray;
import org.json.JSONException;

public class Cpp extends CordovaPlugin {

    public static final String ACTION_SEVEN = "seven"; 

    public Cpp() { }

    @Override
    public boolean execute(String action, JSONArray args, CallbackContext callbackContext) {

        if (ACTION_SEVEN.equals(action)) {
            alert("Message from Java", "Grabbed the number " + get7() + " from C++", "dismiss", callbackContext);
            callbackContext.success();
            return true;
        }
        return false;
    }

    private synchronized void alert(final String title, 
                              final String message, 
                              final String buttonLabel, 
                              final CallbackContext callbackContext) {
        new AlertDialog.Builder(cordova.getActivity())
            .setTitle(title)
            .setMessage(message)
            .setCancelable(false)
            .setNeutralButton(buttonLabel, new AlertDialog.OnClickListener() {
                public void onClick(DialogInterface dialogInterface, int which) {
                    dialogInterface.dismiss();
                    callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, 0));
                }
            })
            .create()
            .show();
    }

    public native int get7();

    static {
        System.loadLibrary("CppLibrary");
    }
}

这是相应的C ++代码:

CppLibrary.cpp:

#include "CppLibrary.h"

extern "C" {

    JNIEXPORT int JNICALL Java_org_example_plugin_cpp_Cpp_get7(JNIEnv* env, jobject thiz)
    {
        return 7;
    }

}

Cpp.h:

#pragma once

extern "C" {
    JNIEXPORT int JNICALL Java_org_example_plugin_cpp_Cpp_get7(JNIEnv* env, jobject thiz);
}

C端实施资源:

http://developer.android.com/ndk/samples/sample_hellojni.html#ci

http://developer.android.com/training/articles/perf-jni.html#faq_ULE

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从Superpowered CrossExample解释适用于Android的C ++代码

来自分类Dev

使用适用于Android的Eclipse IDE在Android代码中搜索对布局xml文件的引用

来自分类Dev

适用于Android Beacon库的Beacon发送器中的错误代码2

来自分类Dev

适用于Android Studio中的移动和穿戴式模块的可重用代码

来自分类Dev

原因:无效的类型代码:适用于Android Studio Gradle的1C

来自分类Dev

适用于Android的简单Jsoup代码

来自分类Dev

代码适用于图像,但不适用于Codeigniter中的其他文件

来自分类Dev

C++ 模板代码适用于 msvc 2015 但不适用于 2017

来自分类Dev

存储过程不适用于c#代码

来自分类Dev

适用于Apache Cassandra的OpsCenter源代码

来自分类Dev

适用于Apache Cassandra的OpsCenter源代码

来自分类Dev

适用于Objective-C和C ++代码的ANSI C代码?

来自分类Dev

代码适用于Java,但不适用于Android

来自分类Dev

Android:代码适用于 api 19 但不适用于 api 24

来自分类Dev

toFixed方法不适用于用户输入,但适用于javascript中的其他var,包括代码段

来自分类Dev

VS2010:折叠代码区域仅适用于.c文件,不适用于.cpp文件

来自分类Dev

用于在C ++中访问数组的代码混淆

来自分类Dev

仅适用于locationmanager的Android源代码?

来自分类Dev

适用于应用程序的Android测试代码?

来自分类Dev

适用于iOS和Android的共享代码库

来自分类Dev

C++ 代码中的主要因素不适用于所有输入

来自分类Dev

Json 文件不适用于 Visual Studio 代码中的 C 程序

来自分类Dev

适用于Android的AsyncTask中的doInBackground

来自分类Dev

适用于Apache Cordova的Visual Studio工具错误

来自分类Dev

适用于Apache Cordova App的Azure Blob存储

来自分类Dev

是否有适用于Microsoft Band的Apache cordova插件?

来自分类Dev

通过引用传递可在C中使用,但不适用于此代码的C ++

来自分类Dev

c 代码不适用于带有浮点数的 turbo c++

来自分类Dev

适用于Android客户管理器的Cordova插件(适用于Ver> 3)

Related 相关文章

  1. 1

    从Superpowered CrossExample解释适用于Android的C ++代码

  2. 2

    使用适用于Android的Eclipse IDE在Android代码中搜索对布局xml文件的引用

  3. 3

    适用于Android Beacon库的Beacon发送器中的错误代码2

  4. 4

    适用于Android Studio中的移动和穿戴式模块的可重用代码

  5. 5

    原因:无效的类型代码:适用于Android Studio Gradle的1C

  6. 6

    适用于Android的简单Jsoup代码

  7. 7

    代码适用于图像,但不适用于Codeigniter中的其他文件

  8. 8

    C++ 模板代码适用于 msvc 2015 但不适用于 2017

  9. 9

    存储过程不适用于c#代码

  10. 10

    适用于Apache Cassandra的OpsCenter源代码

  11. 11

    适用于Apache Cassandra的OpsCenter源代码

  12. 12

    适用于Objective-C和C ++代码的ANSI C代码?

  13. 13

    代码适用于Java,但不适用于Android

  14. 14

    Android:代码适用于 api 19 但不适用于 api 24

  15. 15

    toFixed方法不适用于用户输入,但适用于javascript中的其他var,包括代码段

  16. 16

    VS2010:折叠代码区域仅适用于.c文件,不适用于.cpp文件

  17. 17

    用于在C ++中访问数组的代码混淆

  18. 18

    仅适用于locationmanager的Android源代码?

  19. 19

    适用于应用程序的Android测试代码?

  20. 20

    适用于iOS和Android的共享代码库

  21. 21

    C++ 代码中的主要因素不适用于所有输入

  22. 22

    Json 文件不适用于 Visual Studio 代码中的 C 程序

  23. 23

    适用于Android的AsyncTask中的doInBackground

  24. 24

    适用于Apache Cordova的Visual Studio工具错误

  25. 25

    适用于Apache Cordova App的Azure Blob存储

  26. 26

    是否有适用于Microsoft Band的Apache cordova插件?

  27. 27

    通过引用传递可在C中使用,但不适用于此代码的C ++

  28. 28

    c 代码不适用于带有浮点数的 turbo c++

  29. 29

    适用于Android客户管理器的Cordova插件(适用于Ver> 3)

热门标签

归档