Git Product home page Git Product logo

js-evaluator-for-android's Introduction

JsEvaluator library for running JavaScript in Android apps

JitPack

JsEvaluator may help you run JavaScript in an Android app and get the results. This is an alternative to evaluateJavascript method of the WebView. Supports Android version 4.0 (Ice Cream Sandwich) and newer.

Setup

There are two ways your can add JsEvaluator to your project:

  1. From a remote Maven repositorty.
  2. From a local .aar or .jar file.

1. Setup from Maven repository in Android Studio

  1. Add maven { url "https://jitpack.io" } into allprojects/repositories section of your project build.gradle file. For example:
allprojects {
    repositories {
        jcenter()
        maven { url "https://jitpack.io" }
    }
}
  1. Add compile 'com.github.evgenyneu:js-evaluator-for-android:v1.0.3' into dependencies section of your module build.gradle file. For example:
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    // Keep you existing dependencies here
    compile 'com.github.evgenyneu:js-evaluator-for-android:v1.0.3'
}

For less information, see Gradle/Maven setup instructions on JsEvaluator jitpack.io page.

2. Setup from local .aar file

Download jsevaluator-1.0.aar. You can also build it yourself into jsevaluator/build/outputs/aar/ directory in Android Studio with this command:

./gradlew :jsevaluator:aR

Add aar file to Android Studio project

To add JsEvaluator to your app in Android Studio:

  1. Copy the jsevaluator-1.0.aar to your app/libs folder.
  2. Add compile(name:'jsevaluator-1.0', ext:'aar') to dependencies block of your module build.gradle file.
  3. Add the following code to the repositories block of your project build.gradle file.
flatDir{
    dirs 'libs'
}

Add jar file to Eclipse project

  1. Unzip the jsevaluator-1.0.aar and get the classes.jar from it. You may want to rename it to jsevaluator.jar.
  2. Open properties for your app project.
  3. Select Libraries tab in Java Build Path.
  4. Click Add JARs... button and select the .jar file.
  5. In your project properties click Order and export tab.
  6. Tick the .jar file.

Usage

Create evaluator instance:

JsEvaluator jsEvaluator = new JsEvaluator(this);

this is a reference to your activity.

Evaluate JavaScript

jsEvaluator.evaluate("2 * 17", new JsCallback() {
  @Override
  public void onResult(final String result) {
    // Process result here.
    // This method is called in the UI thread.
  }
});

Note: make sure to call evaluate method in UI thread.

Call a JavaScript function

jsEvaluator.callFunction("function myFunction(a, b, c, a) { return 'result'; }",
  new JsCallback() {

  @Override
  public void onResult(final String result) {
    // Process result here.
    // This method is called in the UI thread.
  }
}, "myFunction", "parameter 1", "parameter 2", 912, 101.3);

Any number of string, int or double parameters can be supplied.

Note: make sure to call callFunction method in UI thread.

JavaScript is evaluated asynchronously

JavaScript is evaluated asynchronously without blocking UI thread. Result is returned in the UI thread. It is required to call evaluate and callFunction in UI thread.

JavaScript is evaluated in new context

Each time the JavaScript is evaluated in the new context. It can not access the result of a previous evaluation. Please concatenate all your JavaScript to one string and evaluate it in one go.

For example, if you need to load jQuery libary and then use it:

String jQuery = "/*! jQuery JavaScript Library v2.1.1 ...";
jsEvaluator.evaluate(jQuery + "; $.isNumeric(123)", new JsCallback() { ...

How it works

Behind the scenes it creates a WebView and feeds it JavaScript code for evaluation:

mWebView = new WebView(context);
String javascript = "<script>myObj.returnResult('Hello World')</script>";
String base64 = Base64.encodeToString(data, Base64.DEFAULT);
mWebView.loadUrl("data:text/html;charset=utf-8;base64," + base64);

The result of evaluation is sent back into Android activity:

public class JavaScriptInterface {
	public void returnResult(String result) {
		// result from JavaScript
	}
}

mWebView.addJavascriptInterface(new JavaScriptInterface(), "myObj");

Tests

Tests are located in app module of this project. The app can be run for manual testing as well.

JsEvaluator library for Android screenshot 1

JsEvaluator library for Android screenshot 2

Or run as Android JUnit Test for unit testing.

Android versions tested:

  • 4.0.3 (Ice Cream Sandwich)
  • 4.1.2, 4.2.2, 4.3 (Jelly Bean)
  • 4.4.2 (KitKat)
  • 5.0, 5.1 (Lollipop)
  • 6.0 Android (Marshmallow)

Feedback is welcome

If you have any issues or need help please do not hesitate to create an issue ticket.

js-evaluator-for-android's People

Contributors

evgenyneu avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.