From 1845faded91ecf268ad79275bca393a7b7c57a6d Mon Sep 17 00:00:00 2001 From: Vishesh Handa Date: Sat, 9 Feb 2019 01:36:42 +0100 Subject: [PATCH] Add POC Android JNI integration I want to stop using jgit and instead of libgit2 instead. I feel far more confident with the latter, and I need to use it for ios anyway. Currently I cannot use the latest version of jgit as that requires a higher minSDKVersion, and I want to target older android devices as well. --- android/app/build.gradle | 10 ++++++++++ android/app/src/main/cpp/CMakeLists.txt | 6 ++++++ android/app/src/main/cpp/native-lib.cpp | 10 ++++++++++ .../java/io/gitjournal/gitjournal/MainActivity.java | 13 +++++++++++++ 4 files changed, 39 insertions(+) create mode 100644 android/app/src/main/cpp/CMakeLists.txt create mode 100644 android/app/src/main/cpp/native-lib.cpp diff --git a/android/app/build.gradle b/android/app/build.gradle index 0edeeb94..dd3d399a 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -44,6 +44,11 @@ android { versionCode flutterVersionCode.toInteger() versionName flutterVersionName testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + externalNativeBuild { + cmake { + cppFlags "" + } + } } signingConfigs { @@ -59,6 +64,11 @@ android { signingConfig signingConfigs.release } } + externalNativeBuild { + cmake { + path "src/main/cpp/CMakeLists.txt" + } + } } flutter { diff --git a/android/app/src/main/cpp/CMakeLists.txt b/android/app/src/main/cpp/CMakeLists.txt new file mode 100644 index 00000000..dfa4515f --- /dev/null +++ b/android/app/src/main/cpp/CMakeLists.txt @@ -0,0 +1,6 @@ +cmake_minimum_required(VERSION 3.4.1) + + +add_library( native-lib + SHARED + native-lib.cpp ) \ No newline at end of file diff --git a/android/app/src/main/cpp/native-lib.cpp b/android/app/src/main/cpp/native-lib.cpp new file mode 100644 index 00000000..a1f314b9 --- /dev/null +++ b/android/app/src/main/cpp/native-lib.cpp @@ -0,0 +1,10 @@ +#include +#include + +extern "C" JNIEXPORT jstring JNICALL +Java_io_gitjournal_gitjournal_MainActivity_stringFromJNI( + JNIEnv* env, + jobject /* this */) { + std::string hello = "Hello from C++"; + return env->NewStringUTF(hello.c_str()); +} diff --git a/android/app/src/main/java/io/gitjournal/gitjournal/MainActivity.java b/android/app/src/main/java/io/gitjournal/gitjournal/MainActivity.java index 74fa36e8..fbafea4c 100644 --- a/android/app/src/main/java/io/gitjournal/gitjournal/MainActivity.java +++ b/android/app/src/main/java/io/gitjournal/gitjournal/MainActivity.java @@ -21,11 +21,24 @@ import io.flutter.util.PathUtils; // For MethodChannel public class MainActivity extends FlutterActivity implements MethodCallHandler { + static { + System.loadLibrary("native-lib"); + } + + /** + * A native method that is implemented by the 'native-lib' native library, + * which is packaged with this application. + */ + public native String stringFromJNI(); + + private static final String CHANNEL_NAME = "gitjournal.io/git"; static MethodChannel channel; @Override protected void onCreate(Bundle savedInstanceState) { + Log.d("VISH", stringFromJNI()); + super.onCreate(savedInstanceState); GeneratedPluginRegistrant.registerWith(this);