summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2019-04-17 18:11:13 +0200
committerFlorian Dold <florian.dold@gmail.com>2019-04-17 18:11:13 +0200
commitaf62dfc6f3312c628bf851b7724c5925c1e839e9 (patch)
treec6807d62e3a3b9ee442d1e3f8dfd0b139f09c65c
parentfb21726c78ae928127aa0476722e77994d1e92d9 (diff)
downloadakono-af62dfc6f3312c628bf851b7724c5925c1e839e9.tar.gz
akono-af62dfc6f3312c628bf851b7724c5925c1e839e9.tar.bz2
akono-af62dfc6f3312c628bf851b7724c5925c1e839e9.zip
make JNI work
-rw-r--r--.gitignore2
-rw-r--r--library/build.gradle.kts14
-rw-r--r--library/src/androidTest/kotlin/InstrumentedAkonoTests.kt6
-rw-r--r--library/src/main/cpp/CMakeLists.txt36
-rw-r--r--library/src/main/cpp/akono-jni.cpp (renamed from library/src/main/cpp/akono-jni.c)19
-rw-r--r--library/src/main/kotlin/akono/AkoniJni.kt12
6 files changed, 67 insertions, 22 deletions
diff --git a/.gitignore b/.gitignore
index 4a919309..aca45b18 100644
--- a/.gitignore
+++ b/.gitignore
@@ -23,4 +23,4 @@
# Ignore developer's machine-specific settings
/local.properties
-
+/deps/compiled/*
diff --git a/library/build.gradle.kts b/library/build.gradle.kts
index f7110ba1..aa21ace1 100644
--- a/library/build.gradle.kts
+++ b/library/build.gradle.kts
@@ -9,10 +9,11 @@ android {
defaultConfig {
minSdkVersion(26)
targetSdkVersion(28)
+
versionCode = 1
versionName = "1.0"
- testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
+ testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
// Specifies the application ID for the test APK.
testApplicationId = "akono.test"
@@ -22,11 +23,9 @@ android {
abiFilters("armeabi-v7a");
}
- //externalNativeBuild {
- // cmake {
- //
- // }
- //}
+ externalNativeBuild {
+ cmake.arguments("-DANDROID_STL=c++_shared")
+ }
}
useLibrary("android.test.runner")
useLibrary("android.test.base")
@@ -49,8 +48,9 @@ android {
// Workaround for AndroidStudio
named("main") {
java.srcDir("src/main/kotlin")
+ jniLibs.srcDirs("../deps/compiled")
+
}
- // jniLibs.srcDirs(FIXME)
}
}
diff --git a/library/src/androidTest/kotlin/InstrumentedAkonoTests.kt b/library/src/androidTest/kotlin/InstrumentedAkonoTests.kt
index b5ea0111..6a59d0ef 100644
--- a/library/src/androidTest/kotlin/InstrumentedAkonoTests.kt
+++ b/library/src/androidTest/kotlin/InstrumentedAkonoTests.kt
@@ -18,4 +18,10 @@ public class InstrumentedAkonoTestOne {
val ajni: AkonoJni = AkonoJni()
assertEquals("foo", ajni.stringFromJNI())
}
+
+ @Test
+ fun myJsTest() {
+ val ajni: AkonoJni = AkonoJni()
+ assertEquals("2", ajni.evalJs("1+1"));
+ }
}
diff --git a/library/src/main/cpp/CMakeLists.txt b/library/src/main/cpp/CMakeLists.txt
index b2983d0b..b101f4bf 100644
--- a/library/src/main/cpp/CMakeLists.txt
+++ b/library/src/main/cpp/CMakeLists.txt
@@ -1,15 +1,41 @@
cmake_minimum_required(VERSION 3.4.1)
-add_library(akono-jni SHARED
- akono-jni.c)
+add_library(
+ akono-jni SHARED
+ akono-jni.cpp
+)
+
+set(deps_dir ${CMAKE_CURRENT_SOURCE_DIR}/../../../../deps)
+
+if(NOT EXISTS ${deps_dir})
+ message( FATAL_ERROR "Dependency directory does not exist")
+endif()
+
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11")
+
+include_directories(
+ ${deps_dir}/node/src
+ ${deps_dir}/node/deps/v8/include
+)
+
+add_library(node SHARED IMPORTED)
+set_target_properties(node PROPERTIES IMPORTED_LOCATION
+ ${deps_dir}/compiled/${ANDROID_ABI}/libnode.so)
add_library(v8 STATIC IMPORTED)
set_target_properties(v8 PROPERTIES IMPORTED_LOCATION
- ${distribution_DIR}/gperf/lib/${ANDROID_ABI}/libgperf.so)
+ ${deps_dir}/compiled/${ANDROID_ABI}/libv8.cr.so)
+add_library(v8_platform STATIC IMPORTED)
+set_target_properties(v8_platform PROPERTIES IMPORTED_LOCATION
+ ${deps_dir}/compiled/${ANDROID_ABI}/libv8_libplatform.cr.so)
# Include libraries needed for hello-jni lib
target_link_libraries(akono-jni
- android
- log)
+ v8
+ v8_platform
+ node
+ android
+ log)
+
diff --git a/library/src/main/cpp/akono-jni.c b/library/src/main/cpp/akono-jni.cpp
index 49777431..2131e0eb 100644
--- a/library/src/main/cpp/akono-jni.c
+++ b/library/src/main/cpp/akono-jni.cpp
@@ -1,5 +1,7 @@
#include <string.h>
#include <jni.h>
+#include <libplatform/libplatform.h>
+#include <v8.h>
/* This is a trivial JNI example where we use a native method
* to return a new VM String. See the corresponding Java source
@@ -7,9 +9,8 @@
*
* hello-jni/app/src/main/java/com/example/hellojni/HelloJni.java
*/
-JNIEXPORT jstring JNICALL
-Java_akono_AkonoJni_stringFromJNI( JNIEnv* env,
- jobject thiz )
+extern "C" JNIEXPORT jstring JNICALL
+Java_akono_AkonoJni_stringFromJNI(JNIEnv* env, jobject thiz)
{
#if defined(__arm__)
#if defined(__ARM_ARCH_7A__)
@@ -43,5 +44,15 @@ Java_akono_AkonoJni_stringFromJNI( JNIEnv* env,
#define ABI "unknown"
#endif
- return (*env)->NewStringUTF(env, "Hello from JNI ! Compiled with ABI " ABI ".");
+ return env->NewStringUTF("Hello from JNI ! Compiled with ABI " ABI ".");
+}
+
+
+extern "C" JNIEXPORT jstring JNICALL
+Java_akono_AkonoJni_evalJs(JNIEnv* env, jobject thiz, jstring source)
+{
+ std::unique_ptr<v8::Platform> platform = v8::platform::NewDefaultPlatform();
+ v8::V8::InitializePlatform(platform.get());
+ v8::V8::Initialize();
+ return env->NewStringUTF("Hello World");
}
diff --git a/library/src/main/kotlin/akono/AkoniJni.kt b/library/src/main/kotlin/akono/AkoniJni.kt
index d3bc7a72..e37bef0e 100644
--- a/library/src/main/kotlin/akono/AkoniJni.kt
+++ b/library/src/main/kotlin/akono/AkoniJni.kt
@@ -1,11 +1,13 @@
package akono;
class AkonoJni {
- external fun stringFromJNI(): String;
+ external fun stringFromJNI(): String;
- companion object {
- init {
- System.loadLibrary("akono-jni")
+ external fun evalJs(source: String): String;
+
+ companion object {
+ init {
+ System.loadLibrary("akono-jni")
+ }
}
- }
}