Make a JNI call.

git-svn-id: https://www.unprompted.com/svn/projects/tildefriends/trunk@4200 ed5197a5-7fde-0310-b194-c3ffbd925b24
This commit is contained in:
Cory McWilliams 2023-03-05 02:54:04 +00:00
parent 28d73f5b37
commit f736756b20
4 changed files with 27 additions and 7 deletions

View File

@ -29,6 +29,7 @@ ANDROID_NDK_TARGET_TRIPLE := aarch64-linux-android
debug windebug androiddebug: CFLAGS += -Og debug windebug androiddebug: CFLAGS += -Og
debug release androidrelease: LDFLAGS += -rdynamic debug release androidrelease: LDFLAGS += -rdynamic
androiddebug androidrelease: CFLAGS += --sysroot $(ANDROID_SDK)/ndk-bundle/sysroot -fPIC
release winrelease: CFLAGS += -DNDEBUG -O3 release winrelease: CFLAGS += -DNDEBUG -O3
windebug winrelease: CC = x86_64-w64-mingw32-gcc-win32 windebug winrelease: CC = x86_64-w64-mingw32-gcc-win32
windebug winrelease: AS = $(CC) windebug winrelease: AS = $(CC)
@ -321,7 +322,9 @@ windebug winrelease: LDFLAGS += \
androiddebug androidrelease: LDFLAGS += \ androiddebug androidrelease: LDFLAGS += \
-ldl \ -ldl \
-lssl \ -lssl \
-lcrypto -lcrypto \
-shared \
-fPIC
unix: debug release unix: debug release
win: windebug winrelease win: windebug winrelease
@ -343,10 +346,10 @@ DEPS = $(ALL_APP_OBJS:.o=.d)
-include $(DEPS) -include $(DEPS)
define build_rules 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) .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] $$@ @echo [link] $$@
@$$(CC) -o $$@ $$^ $$(LDFLAGS) @$$(CC) -o $$@ $$^ $$(LDFLAGS)
@ -381,9 +384,12 @@ out/apk/classes.dex: $(CLASS_FILES)
@echo [dx] $@ @echo [dx] $@
@$(ANDROID_BUILD_TOOLS)/dx --dex --output=$@ out/classes/ @$(ANDROID_BUILD_TOOLS)/dx --dex --output=$@ out/classes/
out/TildeFriends.unsigned.apk: out/apk/classes.dex out/TildeFriends.unsigned.apk: out/apk/classes.dex androiddebug
@mkdir -p $(dir $@) @mkdir -p $(dir $@) out/apk/lib/arm64-v8a/
@echo [aapt] $@ @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/ @$(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 out/TildeFriends.apk: out/TildeFriends.unsigned.apk

View File

@ -10,6 +10,12 @@ public class MainActivity extends Activity {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); setContentView(R.layout.activity_main);
TextView text = (TextView)findViewById(R.id.my_text); TextView text = (TextView)findViewById(R.id.my_text);
text.setText("Hello, world!"); text.setText(getMessage());
}
public native String getMessage();
static {
System.loadLibrary("tildefriends");
} }
} }

8
src/jnitest.c Normal file
View File

@ -0,0 +1,8 @@
#if defined(__ANDROID__)
#include <jni.h>
JNIEXPORT jstring JNICALL Java_com_unprompted_tildefriends_MainActivity_getMessage(JNIEnv* env, jobject obj)
{
return (*env)->NewStringUTF(env, "Hello!");
}
#endif

View File

@ -69,7 +69,7 @@ static void _tf_ssb_rpc_blobs_get(tf_ssb_connection_t* connection, uint8_t flags
} }
uint8_t* blob = NULL; uint8_t* blob = NULL;
size_t size = 0; 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)) if (tf_ssb_db_blob_get(ssb, id, &blob, &size))
{ {
for (size_t offset = 0; offset < size; offset += k_send_max) for (size_t offset = 0; offset < size; offset += k_send_max)