将原生安卓项目封装为cordova插件实例分析

一.引言
在XXXX项目中,很多地方都需要调用插件,其中就用到了高德地图的插件。接下来我就和大家分享一下如何封装cordova插件并使用在ionic项目中。
二.项目结构
如图

134634_d9F4_2493500.png

可以看到,和一般的安卓项目类似,具有src、res、libs等目录,不同的是,这里有一个assets目录,这里就是在ionic项目中调用cordova插件的入口,可以看到AMap.js,这个就是调用高德地图的js文件,他的内容是:

cordova.define("com.laoxc.cordova.amap.AMap", function(require, exports, module) { var exec = require('cordova/exec');

exports.exec = function (action, args, success, error) {
   exec(success, error, "AMap", action, args);
};

exports.cargoLocation = function (shipmentLat, shipmentLng, unloadLat, unloadLng, pointData, successCallback, errorCallback) {
   successCallback = successCallback || function () { };
   errorCallback = errorCallback || function () { };
   exports.exec('CargoLocation', [shipmentLat, shipmentLng, unloadLat, unloadLng, pointData], successCallback, errorCallback);
};
exports.offlineMap = function ( successCallback, errorCallback) {
   successCallback = successCallback || function () { };
   errorCallback = errorCallback || function () { };
   exports.exec('OfflineMap', [], successCallback, errorCallback);
};
});

其中,exec()、cargoLocation()、offlineMap()就是这个插件所具备的三个方法
三.封装cordova插件
1.建立插件目录

134841_hLgo_2493500.png

 


如图,需要建立一个plugin.xml文件,用来对插件的封装进行配置;www目录下放的是AMap.js文件,用来调用原生方法;android这个文件夹名字自定义,里面存放插件上需要用到的所有文件,包括java文件、jar包、图片等等所有需要用到的文件。

2.配置plugin.xml
a.定义头

<?xml version='1.0' encoding='utf-8' ?>
<plugin id="info.zhangren.dusdk" version="1.0.0" xmlns="http://apache.org/cordova/ns/plugins/1.0" xmlns:android="http://schemas.android.com/apk/res/android">
</plugin>
可以看到,我定义了一个id= info.zhangren.dusdk,这个就是我们插件的标识,用来添加插件。
b.定义插件基本信息
在<plugin></plugin>里面添加:
<name>AMap</name>
    <description>
      Cordova Amap Plugin
    </description>
    <license>Apache 2.0</license>

    <js-module src="www/AMap.js" name="AMap">
       <merges target="AMap" />
    </js-module>

    <!-- android -->
    <platform name="android">
        <config-file target="res/xml/config.xml" parent="/*"> 
            <feature name="AMap">
                <param name="android-package" value="com.laoxc.cordova.amap.AMap"/>
            </feature>
        </config-file>

注意:
js-module就是调用原生方法的js文件,一般只有一个。
Platform的value值就是Amap.js所在的绝对路径。
config-file就是原生项目的配置文件。

c.权限申请
将所有在项目中可能用到的对本机的权限都写上,具体内容根据项目需求进行相应修改。

 <!-- 权限申请 -->
    <config-file target="AndroidManifest.xml" parent="/manifest">
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="android.permission.USE_CREDENTIALS" />
    <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
    <uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />

    <permission android:name="android.permission.BAIDU_LOCATION_SERVICE" >
    </permission>

    <uses-permission android:name="android.permission.BAIDU_LOCATION_SERVICE" >
    </uses-permission>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" >
    </uses-permission>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" >
    </uses-permission>
    <uses-permission android:name="android.permission.INTERNET" >
    </uses-permission>
    <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" >
    </uses-permission>
    <!-- <uses-permission android:name="android.permission.WRITE_APN_SETTINGS"></uses-permission> -->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" >
    </uses-permission>
    <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
    <uses-permission android:name="android.permission.WAKE_LOCK" >
    </uses-permission>
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_GPS" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.READ_CONTACTS" />
    <uses-permission android:name="android.permission.CALL_PHONE" />
    <uses-permission android:name="android.permission.READ_SMS" />
    <uses-permission android:name="android.permission.SEND_SMS" />
	</config-file>

d.引入核心文件

java文件

<source-file src="android/javas/cordova/amap/offline/OfflineChild.java" target-dir="src/com/laoxc/cordova/amap/offline/" />  
		<source-file src="android/javas/cordova/amap/offline/OfflineDownloadedAdapter.java" target-dir="src/com/laoxc/cordova/amap/offline/" />  
		<source-file src="android/javas/cordova/amap/offline/OfflineListAdapter.java" target-dir="src/com/laoxc/cordova/amap/offline/" />  
		<source-file src="android/javas/cordova/amap/offline/OfflineMapActivity.java" target-dir="src/com/laoxc/cordova/amap/offline/" />  
		<source-file src="android/javas/cordova/amap/offline/OfflinePagerAdapter.java" target-dir="src/com/laoxc/cordova/amap/offline/" />
		<source-file src="android/javas/cordova/amap/offline/ToastUtil.java" target-dir="src/com/laoxc/cordova/amap/offline/" />  
		<source-file src="android/javas/cordova/amap/AMap.java" target-dir="src/com/laoxc/cordova/amap/" /> 
        <source-file src="android/javas/cordova/amap/CargoLocationActivity.java" target-dir="src/com/laoxc/cordova/amap/" /> 		
		<source-file src="android/javas/cordova/util/PointVo.java" target-dir="src/com/laoxc/cordova/util/" />
		<source-file src="android/javas/cordova/util/ScaleView.java" target-dir="src/com/laoxc/cordova/util/" />
		<source-file src="android/javas/cordova/util/TrackPlayVo.java" target-dir="src/com/laoxc/cordova/util/" />
		<source-file src="android/javas/map/MainActivity.java" target-dir="src/com/laoxc/map/" />

库文件

<source-file src="android/libs/arm64-v8a/libamapv304.so" target-dir="libs/arm64-v8a/" />
		<source-file src="android/libs/arm64-v8a/libamapv304ex.so" target-dir="libs/arm64-v8a/" />
		<source-file src="android/libs/armeabi/libamapv304.so" target-dir="libs/armeabi/" />
		<source-file src="android/libs/armeabi/libamapv304ex.so" target-dir="libs/armeabi/" />
		<source-file src="android/libs/armeabi-v7a/libamapv304.so" target-dir="libs/armeabi-v7a/" />
		<source-file src="android/libs/armeabi-v7a/libamapv304ex.so" target-dir="libs/armeabi-v7a/" />
		<source-file src="android/libs/AMap_Services_V2.4.0.jar" target-dir="libs/" />
		<source-file src="android/libs/Android_Location_V1.3.3.jar" target-dir="libs/" />
		<source-file src="android/libs/Android_Map_V2.5.0.jar" target-dir="libs/" />

资源文件
<!-- res -->
		<source-file src="android/res/layout/activity_cargo_location.xml" target-dir="res/layout/" />
		<source-file src="android/res/layout/layout_infowindow.xml" target-dir="res/layout/" />
		<source-file src="android/res/layout/layout_titlebar_back.xml" target-dir="res/layout/" />
		<source-file src="android/res/layout/offline_downloaded_list.xml" target-dir="res/layout/" />
		<source-file src="android/res/layout/offline_map_layout.xml" target-dir="res/layout/" />
		<source-file src="android/res/layout/offline_province_listview.xml" target-dir="res/layout/" />
		<source-file src="android/res/layout/offlinemap_activity.xml" target-dir="res/layout/" />
		<source-file src="android/res/layout/offlinemap_child.xml" target-dir="res/layout/" />
		<source-file src="android/res/layout/offlinemap_group.xml" target-dir="res/layout/" />
		<source-file src="android/res/layout/selector_map_profile.xml" target-dir="res/layout/" />
		<source-file src="android/res/layout/shape_map_profile.xml" target-dir="res/layout/" />
		<source-file src="android/res/layout/shape_map_profile_pressed.xml" target-dir="res/layout/" />
		
		<source-file src="android/res/values/attrs.xml" target-dir="res/values/" />
		<source-file src="android/res/values/color.xml" target-dir="res/values/" />
		<source-file src="android/res/values/dimens.xml" target-dir="res/values/" />
		<source-file src="android/res/values/strings.xml" target-dir="res/values/" />
		<source-file src="android/res/values/styles.xml" target-dir="res/values/" />
		
		<source-file src="android/res/drawable-hdpi/car_offline1.png" target-dir="res/drawable-hdpi/" />
		<source-file src="android/res/drawable-hdpi/custom_info_bubble.9.png" target-dir="res/drawable-hdpi/" />
		<source-file src="android/res/drawable-hdpi/downarrow.png" target-dir="res/drawable-hdpi/" />
		<source-file src="android/res/drawable-hdpi/ic_back_white.png" target-dir="res/drawable-hdpi/" />
		<source-file src="android/res/drawable-hdpi/ic_bg.9.png" target-dir="res/drawable-hdpi/" />
		<source-file src="android/res/drawable-hdpi/ic_car.png" target-dir="res/drawable-hdpi/" />
		<source-file src="android/res/drawable-hdpi/ic_discar.png" target-dir="res/drawable-hdpi/" />
		<source-file src="android/res/drawable-hdpi/ic_scale.9.png" target-dir="res/drawable-hdpi/" />
		<source-file src="android/res/drawable-hdpi/ic_shipment.png" target-dir="res/drawable-hdpi/" />
		<source-file src="android/res/drawable-hdpi/ic_tel.png" target-dir="res/drawable-hdpi/" />
		<source-file src="android/res/drawable-hdpi/ic_unlocation.png" target-dir="res/drawable-hdpi/" />
		<source-file src="android/res/drawable-hdpi/ic_zoomin.png" target-dir="res/drawable-hdpi/" />
		<source-file src="android/res/drawable-hdpi/ic_zoomout.png" target-dir="res/drawable-hdpi/" />
		<source-file src="android/res/drawable-hdpi/icon.png" target-dir="res/drawable-hdpi/" />
		<source-file src="android/res/drawable-hdpi/offline_back.png" target-dir="res/drawable-hdpi/" />
		<source-file src="android/res/drawable-hdpi/offline_common_bar_bg.9.png" target-dir="res/drawable-hdpi/" />
		<source-file src="android/res/drawable-hdpi/offline_common_title_btn_selector.xml" target-dir="res/drawable-hdpi/" />
		<source-file src="android/res/drawable-hdpi/offlinearrow_but_normal.9.png" target-dir="res/drawable-hdpi/" />
		<source-file src="android/res/drawable-hdpi/offlinearrow_but_pressed.9.png" target-dir="res/drawable-hdpi/" />
		<source-file src="android/res/drawable-hdpi/offlinearrow_down.png" target-dir="res/drawable-hdpi/" />
		<source-file src="android/res/drawable-hdpi/offlinearrow_download.png" target-dir="res/drawable-hdpi/" />
		<source-file src="android/res/drawable-hdpi/offlinearrow_start.png" target-dir="res/drawable-hdpi/" />
		<source-file src="android/res/drawable-hdpi/offlinearrow_stop.png" target-dir="res/drawable-hdpi/" />
		<source-file src="android/res/drawable-hdpi/offlinearrow_tab1_normal.9.png" target-dir="res/drawable-hdpi/" />
		<source-file src="android/res/drawable-hdpi/offlinearrow_tab1_pressed.9.png" target-dir="res/drawable-hdpi/" />
		<source-file src="android/res/drawable-hdpi/offlinearrow_tab2_normal.9.png" target-dir="res/drawable-hdpi/" />
		<source-file src="android/res/drawable-hdpi/offlinearrow_tab2_pressed.9.png" target-dir="res/drawable-hdpi/" />
		<source-file src="android/res/drawable-hdpi/point1.png" target-dir="res/drawable-hdpi/" />
		<source-file src="android/res/drawable-hdpi/point2.png" target-dir="res/drawable-hdpi/" />
		<source-file src="android/res/drawable-hdpi/point3.png" target-dir="res/drawable-hdpi/" />
		<source-file src="android/res/drawable-hdpi/point4.png" target-dir="res/drawable-hdpi/" />
		<source-file src="android/res/drawable-hdpi/point5.png" target-dir="res/drawable-hdpi/" />
		<source-file src="android/res/drawable-hdpi/point6.png" target-dir="res/drawable-hdpi/" />
		<source-file src="android/res/drawable-hdpi/rightarrow.png" target-dir="res/drawable-hdpi/" />

需要注意的是
Src指定的目录是此文件在你的cordova插件中的位置,target对应的是引入到你的项目中的位置,这个位置以及名字定义要严格按照原安卓项目中来定义。因为只有这样才能不破坏原程序的目录结构,并且在调用插件的时候能够准确找到对应的文件位置。

四.安装插件
使用命令cordova plugin add E:\cordovaPlugin\cordova-plugin-map,这里我没有上传到github上,所以使用的是本地安装,add后面对应的是本地插件目录。

134842_gmYp_2493500.png

至此,cordova插件封装完成。

 

转载于:https://my.oschina.net/keysITer/blog/601744

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值