From f736756b209f764ebdc25561e1fc527b04884793 Mon Sep 17 00:00:00 2001 From: Cory McWilliams Date: Sun, 5 Mar 2023 02:54:04 +0000 Subject: [PATCH] Make a JNI call. git-svn-id: https://www.unprompted.com/svn/projects/tildefriends/trunk@4200 ed5197a5-7fde-0310-b194-c3ffbd925b24 --- Makefile | 16 +++++++++++----- .../unprompted/tildefriends/MainActivity.java | 8 +++++++- src/jnitest.c | 8 ++++++++ src/ssb.rpc.c | 2 +- 4 files changed, 27 insertions(+), 7 deletions(-) create mode 100644 src/jnitest.c diff --git a/Makefile b/Makefile index b215c9b3..5256528b 100644 --- a/Makefile +++ b/Makefile @@ -29,6 +29,7 @@ ANDROID_NDK_TARGET_TRIPLE := aarch64-linux-android debug windebug androiddebug: CFLAGS += -Og debug release androidrelease: LDFLAGS += -rdynamic +androiddebug androidrelease: CFLAGS += --sysroot $(ANDROID_SDK)/ndk-bundle/sysroot -fPIC release winrelease: CFLAGS += -DNDEBUG -O3 windebug winrelease: CC = x86_64-w64-mingw32-gcc-win32 windebug winrelease: AS = $(CC) @@ -321,7 +322,9 @@ windebug winrelease: LDFLAGS += \ androiddebug androidrelease: LDFLAGS += \ -ldl \ -lssl \ - -lcrypto + -lcrypto \ + -shared \ + -fPIC unix: debug release win: windebug winrelease @@ -343,10 +346,10 @@ DEPS = $(ALL_APP_OBJS:.o=.d) -include $(DEPS) define build_rules -$(1): $(BUILD_DIR)/$(1)/$(PROJECT)$(if $(filter win%,$(1)),.exe) +$(1): $(BUILD_DIR)/$(1)/$(if $(filter android%,$(1)),lib)$(PROJECT)$(if $(filter win%,$(1)),.exe)$(if $(filter android%,$(1)),.so) .PHONY: $(1) -$(BUILD_DIR)/$(1)/$(PROJECT)$(if $(filter win%,$(1)),.exe): $(filter $(BUILD_DIR)/$(1)/%,$(ALL_APP_OBJS)) +$(BUILD_DIR)/$(1)/$(if $(filter android%,$(1)),lib)$(PROJECT)$(if $(filter win%,$(1)),.exe)$(if $(filter android%,$(1)),.so): $(filter $(BUILD_DIR)/$(1)/%,$(ALL_APP_OBJS)) @echo [link] $$@ @$$(CC) -o $$@ $$^ $$(LDFLAGS) @@ -381,9 +384,12 @@ out/apk/classes.dex: $(CLASS_FILES) @echo [dx] $@ @$(ANDROID_BUILD_TOOLS)/dx --dex --output=$@ out/classes/ -out/TildeFriends.unsigned.apk: out/apk/classes.dex - @mkdir -p $(dir $@) +out/TildeFriends.unsigned.apk: out/apk/classes.dex androiddebug + @mkdir -p $(dir $@) out/apk/lib/arm64-v8a/ @echo [aapt] $@ + @cp out/androiddebug/libtildefriends.so out/apk/lib/arm64-v8a/ + @cp deps/openssl/android/arm64-v8a/usr/local/lib/libssl.so out/apk/lib/arm64-v8a/ + @cp deps/openssl/android/arm64-v8a/usr/local/lib/libcrypto.so out/apk/lib/arm64-v8a/ @$(ANDROID_BUILD_TOOLS)/aapt package -f -M src/android/AndroidManifest.xml -S src/android/res/ -I $(ANDROID_PLATFORM)/android.jar -F $@ out/apk/ out/TildeFriends.apk: out/TildeFriends.unsigned.apk diff --git a/src/android/com/unprompted/tildefriends/MainActivity.java b/src/android/com/unprompted/tildefriends/MainActivity.java index a593283e..dbc5b525 100644 --- a/src/android/com/unprompted/tildefriends/MainActivity.java +++ b/src/android/com/unprompted/tildefriends/MainActivity.java @@ -10,6 +10,12 @@ public class MainActivity extends Activity { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView text = (TextView)findViewById(R.id.my_text); - text.setText("Hello, world!"); + text.setText(getMessage()); + } + + public native String getMessage(); + + static { + System.loadLibrary("tildefriends"); } } diff --git a/src/jnitest.c b/src/jnitest.c new file mode 100644 index 00000000..d7ee5fab --- /dev/null +++ b/src/jnitest.c @@ -0,0 +1,8 @@ +#if defined(__ANDROID__) +#include + +JNIEXPORT jstring JNICALL Java_com_unprompted_tildefriends_MainActivity_getMessage(JNIEnv* env, jobject obj) +{ + return (*env)->NewStringUTF(env, "Hello!"); +} +#endif diff --git a/src/ssb.rpc.c b/src/ssb.rpc.c index 7027ba0c..497a02b7 100644 --- a/src/ssb.rpc.c +++ b/src/ssb.rpc.c @@ -69,7 +69,7 @@ static void _tf_ssb_rpc_blobs_get(tf_ssb_connection_t* connection, uint8_t flags } uint8_t* blob = NULL; size_t size = 0; - const int k_send_max = 8192; + const size_t k_send_max = 8192; if (tf_ssb_db_blob_get(ssb, id, &blob, &size)) { for (size_t offset = 0; offset < size; offset += k_send_max)