当前位置: 首页 > 工具软件 > Duktape > 使用案例 >

嵌入式android源代码,打包为Android的Duktape嵌入式Javascript引擎

梁研
2023-12-01

Duktape Android

UsageDuktape duktape =Duktape.create();try {

Log.d("Greeting", duktape.evaluate("'hello world'.toUpperCase();").toString());

} finally {

duktape.close();

}

Supported Java Types

Currently, the following Java types are supported when interfacing with JavaScript :boolean and boolean

int and Integer - as an argument only (not a return value) when calling JavaScript from Java.

double and double

String

void - as a return value.

Object is also supported in declarations, but the type of the actual value passed must be one of the above or null.

Calling Java from JavaScript

You can provide a Java object for use as a JavaScript global, and call Java functions from JavaScript!

Example

Suppose we wanted to expose the functionality of okio's ByteString in JavaScript to convert hex-encoded strings back into UTF-8.First, define a Java interface that declares the methods you would like to call from JavaScript :interfaceUtf8 {

StringfromHex(Stringhex);

}

Next, implement the interface in Java code (we leave the heavy lifting to okio) :Utf8 utf8 =newUtf8() {

@OverridepublicStringfromHex(Stringhex) {

returnokio.ByteString.decodeHex(hex).utf8();

}

};

Now you can set the object to a JavaScript global, making it available in JavaScript code :// Attach our interface to a JavaScript object called Utf8.duktape.set("Utf8", Utf8.class, utf8);String greeting = (String) duktape.evaluate(""// Here we have a hex encoded string.+"var hexEnc = 'EC9588EB8595ED9598EC84B8EC9A9421';n"// Call out to Java to decode it!+"var message = Utf8.fromHex(hexEnc);n"+"message;");Log.d("Greeting", greeting);

Calling JavaScript from Java

You can attach a Java interface to a JavaScript global object, and call JavaScript functions directly from Java!the same Java types are supported for function arguments and return values as the opposite case above.

Example

Imagine a world where we don't have okio's ByteString.Fortunately, there's a Duktape builtin that allows us to convert hex-encoded strings back into UTF-8!we can easily set up a proxy that allows us to use it directly from our Java code.First, define a Java interface that declares the JavaScript methods you would like to call :interfaceUtf8 {

StringfromHex(Stringhex);

}

Next, we define a global JavaScript object in Duktape to connect to :// Note that Duktape.dec returns a Buffer, we must convert it to a String return value.duktape.evaluate(""+"var Utf8 = {n"+" fromHex: function(v) { return String(Duktape.dec('hex', v)); }n"+"};");

Now you can connect our interface to the JavaScript global, making it available in Java code :// Connect our interface to a JavaScript object called Utf8.Utf8 utf8 = duktape.get("Utf8", Utf8.class);// Call into the JavaScript object to decode a string.String greeting = utf8.fromHex("EC9588EB8595ED9598EC84B8EC9A9421");Log.d("Greeting", greeting);

Downloadcompile 'com.squareup.duktape:duktape-android:1.2.0'

This library is provided as a"fat"aar with native binaries for all available architectures.to reduce your APK size, use the ABI filtering/splitting techniques in the Android plugin :

Snapshots of the development version are available in Sonatype's snapshots repository.

Building

for Android./gradlew build

Set the java.library.path system property to build/ when you execute Java.

LicenseCopyright 2015 Square, Inc.

Licensed under the Apache License, Version 2.0 (the"License");

you may not use this file except in compliance with the License.

You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software

distributed under the License is distributed on an"AS IS" BASIS,

WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

See the License for the specific language governing permissions and

limitations under the License.

Note : the included C code from Duktape is licensed under MIT.

 类似资料: