Cordova利用web view,让开发者可以使用HTML,JavaScript和CSS来编写移动应用。GitHub有很多的学习资源。这里分享下如何把Android AAR文件打包到Cordova插件中。
配置
- Android Studio 2.2.3
- Gradle 2.14.1
- Cordova 6.5.0
- Dynamsoft Barcode Reader for Android 4.2
Cordova Android工程
初始化工程:
cordova create simplebarcode com.dynamsoft.simplebarcode SimpleBarcode
添加Android平台:
cd simplebarcode
cordova platform add android --save
在simplebarcode\platforms\android\assets\www\index.html中添加一个按钮:
<body>
<div class="app">
<div id="deviceready">
<button id="scan">scan barcode</button>
</div>
</div>
<script type="text/javascript" src="cordova.js"></script>
<script type="text/javascript" src="js/index.js"></script>
</body>
编译运行程序:
依赖Android AAR文件的Cordova插件
学习phonegap-plugin-barcodescanner的源码, Cordova插件的目录结构如下:
- src/
- android/
- *.java
- *.aar
- *.gradle
- www/
- *.js
- plugin.xml
我准备集成DynamsoftBarcodeReader.aar和dbr.aar到Cordova插件中。因此需要做一些修改。
打开src\android\com\phonegap\plugins\barcodescanner\BarcodeScanner.java,在scan函数中调用Activity:
public void scan(final JSONArray args) {
final CordovaPlugin that = this;
cordova.getThreadPool().execute(new Runnable() {
public void run() {
Intent intentScan = new Intent(that.cordova.getActivity().getBaseContext(), DBR.class);
intentScan.setAction("com.dynamsoft.dbr");
// avoid calling other phonegap apps
intentScan.setPackage(that.cordova.getActivity().getApplicationContext().getPackageName());
that.cordova.startActivityForResult(that, intentScan, REQUEST_CODE);
}
});
}
把aar文件添加到gradle文件中:
dependencies {
compile 'com.android.support:support-v4:+'
compile(name:'dbr', ext:'aar')
compile(name:'DynamsoftBarcodeReader', ext:'aar')
}
在plugin.xml中添加权限,配置资源:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<plugin xmlns="http://www.phonegap.com/ns/plugins/1.0" xmlns:android="http://schemas.android.com/apk/res/android" id="phonegap-plugin-barcodescanner" version="6.0.5">
<name>BarcodeScanner</name>
<description>Use Dynamsoft Barcode Reader plugin to scan different types of barcodes.</description>
<license>MIT</license>
<engines>
<engine name="cordova" version=">=3.0.0"/>
</engines>
<js-module src="www/barcodescanner.js" name="BarcodeScanner">
<clobbers target="cordova.plugins.barcodeScanner"/>
</js-module>
<platform name="android">
<source-file src="src/android/com/phonegap/plugins/barcodescanner/BarcodeScanner.java" target-dir="src/com/phonegap/plugins/barcodescanner"/>
<config-file target="res/xml/config.xml" parent="/*">
<feature name="BarcodeScanner">
<param name="android-package" value="com.phonegap.plugins.barcodescanner.BarcodeScanner"/>
</feature>
</config-file>
<config-file target="AndroidManifest.xml" parent="/manifest/application">
<activity android:name="com.dynamsoft.demo.dynamsoftbarcodereaderdemo.DBR" android:clearTaskOnLaunch="true" android:configChanges="orientation|keyboardHidden|screenSize" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" android:windowSoftInputMode="stateAlwaysHidden" android:exported="false" />
</config-file>
<config-file target="AndroidManifest.xml" parent="/manifest">
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.FLASHLIGHT"/>
<uses-feature android:name="android.hardware.camera" android:required="true"/>
</config-file>
<framework src="src/android/barcodescanner.gradle" custom="true" type="gradleReference"/>
<resource-file src="src/android/dbr.aar" target="libs/dbr.aar"/>
<resource-file src="src/android/DynamsoftBarcodeReader.aar" target="libs/DynamsoftBarcodeReader.aar"/>
<dependency id="cordova-plugin-compat" version="^1.0.0"/>
</platform>
</plugin>
把插件添加到Cordova工程中:
cordova plugin add <plugin folder>
在simplebarcode\platforms\android\assets\www\js\index.js中添加按钮触发事件:
onDeviceReady: function() {
document.getElementById("scan").onclick = function() {
cordova.plugins.barcodeScanner.scan(
function (result) {
alert("We got a barcode\n" +
"Result: " + result.text + "\n" +
"Format: " + result.format + "\n" +
"Cancelled: " + result.cancelled);
},
function (error) {
alert("Scanning failed: " + error);
},
{
"preferFrontCamera" : false, // iOS and Android
"showFlipCameraButton" : true, // iOS and Android
}
);
}
this.receivedEvent('deviceready');
},
编译运行app:
源码
https://github.com/dynamsoft-dbr/cordova-plugin-android-barcode