PhoneGap中自创插件使用第三方.so文件

1. 在Android project中,用eclipse生成.so文件/jni头文件,并调用。 

参考系列文章:http://blog.csdn.net/jiuyueguang/article/details/9447245

尤其1.2。

遇到的问题见

http://blog.csdn.net/jiaoshengha/article/details/76881925


2. Android Project中加载第三方给的.so文件。

apk安装失败→确定.so库版本,arm x86 etc。。


3.  在PhoneGap工程中,像3一样添加libs/.so文件,调用弹出。

此为在java工程中调用,并非是plugin /js之类的使用方法。

是为了先确定.so文件可以在phonegap工程中使用。。。



4. 在PhoneGap中通过插件调用.so文件

先参考以下文章,创建phonegap插件
http://blog.csdn.net/jiaoshengha/article/details/76826490

jar文件参考  http://blog.csdn.net/fisherwan/article/details/27974229

http://blog.csdn.net/lyc_xiaochao/article/details/52947575


a. 将2中能使app运行的so文件拷贝到plugin src目录下

b. 新建.so对应的java文件HelloActivity.java,放plugin src目录下


c. 修改plugin.xml内容,增加src文件和.so文件。

注意:source-file标签中,src和target-dir的设置!!

PluginDemo.java的target-dir不需要改!

                           不需要改成跟HelloActivity.java对应!

                          需要跟PhoneGap插件feature-value中值对应!

HelloActivity.java的target-dir需要改成jni对应头文件的目录结构!

libs文件夹中包含需要的.so文件。

<?xml version='1.0' encoding='utf-8'?>
<plugin id="org.apache.plugindemo" version="1.0.0" xmlns="http://apache.org/cordova/ns/plugins/1.0" xmlns:android="http://schemas.android.com/apk/res/android">
	<name>PluginDemo</name>
<js-module name="PluginDemo" src="www/PluginDemo.js">
	<clobbers target="cordova.plugins.PluginDemo" />
</js-module>
<platform name="android">
	<config-file parent="/*" target="res/xml/config.xml">
		<feature name="PluginDemo">
			<param name="android-package" value="org.apache.plugindemo.PluginDemo" />
		</feature>
	</config-file>
	<config-file parent="/*" target="AndroidManifest.xml"></config-file>
	<source-file src="src/android/PluginDemo.java" target-dir="src/org/apache/plugindemo" />
	<source-file src="src/android/HelloActivity.java" target-dir="src/com/hello/hello" /> //jni头文件目录结构
	<source-file src="src/android/libs/mips64/libhello.so" target-dir="libs/mips64"/>
	<source-file src="src/android/libs/x86/libhello.so" target-dir="libs/x86"/>
</platform>
</plugin>

d. cd到工程路径,添加插件到PhoneGap工程

cordova plugin add ~/AndroidStudioProjects/cordova/plugin/PluginDemo


e. Android Studio打开PhoneGap android项目,编辑HelloActivity.java PluginDemo.java ,

其余PluginDemo.js index.js index.html与之前没.so文件的插件内容一样,附上只是怕万一丢了。。。。


HelloActivity.java  本地声明

package com.hello.hello;

public class HelloActivity {
    public static native String sayHello();
}

PluginDemo.java

添加

import com.hello.hello.HelloActivty;

load .so file

调用.so库中sayHello()函数 message2 = new HelloActivity().sayHello();

package org.apache.plugindemo;

import org.apache.cordova.CordovaPlugin;
import org.apache.cordova.CallbackContext;

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

import static java.lang.System.loadLibrary;
import com.hello.hello.HelloActivity;  //add this


/**
 * This class echoes a string called from JavaScript.
 */
public class PluginDemo extends CordovaPlugin {

    static
    {
        loadLibrary("hello"); //add this
    }
    @Override
    public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
        if (action.equals("coolMethod")) {
            String message = args.getString(0);
            String message2 = new HelloActivity().sayHello(); //add this
            this.coolMethod(message2, callbackContext);
            return true;
        }
        return false;
    }

    private void coolMethod(String message, CallbackContext callbackContext) {
        if (message != null && message.length() > 0) {
            callbackContext.success(message);
        } else {
            callbackContext.error("Expected one non-empty string argument.");
        }
    }
}

PluginDemo.js

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

exports.coolMethod = function(arg0, success, error) {
    exec(success, error, "PluginDemo", "coolMethod", [arg0]);
};

index.js

function Plugindemo(){
    cordova.plugins.PluginDemo.coolMethod(["success!"], success, error);
}

function success(msg){
    console.log(msg);
    alert(msg);
}

function error(){
    console.log(msg);
    alert(msg);
}

index.html

<body>
        <h1>PhoneGap</h1>
    <script type="text/javascript" src="cordova.js"></script>
    <script type="text/javascript" src="js/index.js"></script>
        <button οnclick="Plugindemo();">PluginDemo</button>
</body>


f. cordova run android 发现点击按钮弹出sayHello里内容啦~

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值