现在有一个项目使用了Cordova,如果不知道Cordova是个什么东东,可以直接百度Cordova进入Cordova中文官网,其中的入门资料还算全。简单的说Cordova是可以使用Js开发移动应用的神器,就是这些框架使得我们这些原生哥们不得不学(扯淡尼)。最近做项目的时候,看着官方的文档看的半知半解,想到网上看看有没有前辈做过的。不看不知道,我的天呀,好家伙前前后后就那两三个人写的博客,结果一大堆,还有翻译官方文档的,心凉半截啊。
++++++++++++++++++++++上面在闲扯淡++++++++++++++++++++++++++++++++++++++
编写Android插件我现在知道的有两种方法,一种是手动的按照官方给的方法在指定的文件中添加指定的项(这种方法我是没成功不过是官方的)。下面说另一种方法,也就是我干成功的一种。那我们就一步一步来做:
创建Cordova项目:
1.cordova create testcordova.
2.cordova platform add android --save
创建插件:
1.npm install -g plugman.
2.plugman create --name DemoAndroid --plugin_id com.test.demo --plugin_version 1.0.0.
3.cd DemoAndroid & plugman platform add --platform_name android
4.plugman createpackagejson ../DemoAndroid
5.cd ..
6.cordova plugin add DemoAndroid.
到这一步插件生成完成了,下一步就是修改对应的接口操作了。通过上面的操作可以在你src目录下生成一个插件的java文件,主要依靠的是CordovaPlugin这个API,实现execute这个函数。如果你这个插件还依赖一些其他的第三方库比如jar或者aar包之类的,可以在plugman platform add --platform_name android 之后再Android插件中添加(大致猜测如果使用其中的类需要反射,这个我还没有实现成功),但是也可以在项目中直接导入后在插件接口中实现。
例如:
java中的:
@Override
public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
Log.i("aaa", "+++++++++++++" + action + "+++++++++++++++++");
if (action.equals("execVM")) {
Log.i("aaa", "+++++++++++++" + args.getString(0) + "+++++++++++++++++");
Gson gson = new Gson();
TransData transData = gson.fromJson(args.getString(0), TransData.class);
String result = null;
if(Transmit.getInstance().execute(transData) == 0){
result = gson.toJson(transData);
}
resultHandle(result, callbackContext);
return true;
}
return false;
}
js:
module.exports = {
execVM: function(successCallBack, errorCallBack, args){
exec(successCallBack, errorCallBack, "VMExec", "execVM", [args]);
}
}
index.js中调用:
cordova.plugins.VMExec.execVM(function (success){
alert(success);
}, function (error){
alert(error);
}, json);
这里面值得注意的是cordova.plugins.VMExec这个是在cordova_plugins.js中注册的时候写的调用方式:
"clobbers": [
"cordova.plugins.VMExec"
]
还要注意Android文件下的build.gradle不要添加第三方依赖,cordova build的时候会被还原成最初的,应该在同级目录下建一个build_extras.gradle 内容可以随便写,下面是我的:
def minSdkVersion = 17
if(cdvMinSdkVersion == null) {
ext.cdvMinSdkVersion = minSdkVersion;
} else if (cdvMinSdkVersion.toInteger() < minSdkVersion) {
ext.cdvMinSdkVersion = minSdkVersion;
}
repositories{
jcenter()
flatDir{
dirs 'libs'
}
}
android {
packagingOptions {
exclude 'META-INF/NOTICE'
exclude 'META-INF/LICENSE'
}
}
dependencies {
compile 'com.android.support:appcompat-v7:25.2.0'
compile 'com.android.support:gridlayout-v7:25.2.0'
compile 'com.google.code.gson:gson:2.7'
}