ionic3如何编写插件,我这里就不详细描述了,给出一个参考地址参考这里。
重点说的是如何调用aar以及关于activity 的问题。
1.使用plugman生成对应的插架的目录。
cd ionic-how-to-create-cordova-plugin
mkdir plugins_src
cd plugins_src
plugman create --name HelloWorld --plugin_id cordova-plugin-hello-world --plugin_version 0.0.1
cd HelloWorld
plugman platform add --platform_name android
plugman platform add --platform_name ios
cd ..
cd ..
ionic cordova plugin add plugins_src/HelloWorld
最后一步基本都会报错,因为我们缺少一个 packagejson的文件,plugman提供了这个功能。
2.使用 plugman 生成配置文件
plugman createpackagejson .
简单回答一些问题,生成的packagejson 看起来有点像这样
{
"name": "HelloWorld",
"version": "0.0.1",
"description": "HelloWorld",
"cordova": {
"id": "cordova-plugin-hello-world",
"platforms": [
"android",
"ios"
]
},
"keywords": [
"ecosystem:cordova",
"cordova-android",
"cordova-ios"
],
"author": "Garfield",
"license": "ISC"
}
**这里面有个坑,虽然我的例子里面是用了 cordova-plugin-hello-world 这样的插件名字,但是我不建议你这么做,在我的编译环境下,java 没有办法认识带有中横线的包,我索性都改成了 . **
3. 目录结构
拷贝你的.aar到你的 plugins_src 下面,然后建立一个空白的build.gradle,这里的内容我们待会儿在添加。
4 利用你的Android Studio,拷贝需要的gradle
在AS下如何使用aar ,这个应该就相对简单了吧,新建一个工程,然后新建模块,导入aar,就行了。
如果你的aar 有需要的依赖,也一起填进来。这个时候查看你的工程的build.gradle ,我们需要拷贝其中
repositories{
jcenter()
flatDir{
dirs 'libs'
}
}
dependencies {
compile(name:'youraarfile', ext:'aar')
compile 'com.google.code.gson:gson:2.2.4'
compile 'com.android.support:support-v13:26.1.0'
}
android {
defaultConfig {
minSdkVersion 16
targetSdkVersion 22
}
packagingOptions {
exclude 'META-INF/NOTICE'
exclude 'META-INF/LICENSE'
}
}
其中重要的地方是:
compile(name:'youraarfile', ext:'aar')
5 修改plugin.xml
这里面有几个重点,
添加
第二个重点是 如果你的aar 里面有activity ,也需要添加进来。
如果你不知道aar 里面有什么,把aar的后缀改成zip,然后解压缩,同样可以看到 AndroidManifest.xml。
其中关于Activity 的部分拷贝到你的plugin.xml 中。
6 编写代码
插件.java 中如果用到了 activity ,会出现一个提示,
Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
大致的意思是 你想从一个 Activity 的外部呼叫这个 Activity的话 ,需要一个 FLAG_ACTIVITY_NEW_TASK 标志。
//下面最关键,利用intent启动新的Activity
Intent intent = new Intent(cordova.getActivity(), youaarfile.Activity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra("mode","auth");
intent.setPackage(this.cordova.getActivity().getApplicationContext().getPackageName());
if (this.cordova != null) {
this.cordova.startActivityForResult((CordovaPlugin) this, intent, 0);
}
7 至于在page里面如何调用plugin 类似下面就可以了
declare var cordova: any;
cordova.plugins.yourplugin.coolMethod({
_sMessage: "Hello World"
}, success, failure);
网友评论