From ee36b4b967188c2cb89dadbe2a88fde7aa254b18 Mon Sep 17 00:00:00 2001 From: Laurent Sansonetti Date: Sat, 9 Aug 2014 11:15:51 +0200 Subject: [PATCH] Use `System.loadLibrary()` to load the payload. This is what JNI sample apps use. Line 64: https://android.googlesource.com/platform/development/+/android-4.4.4_r2/ndk/samples/hello-jni/src/com/example/hellojni/HelloJni.java This makes RubyMotion work on older Android versions (such as API 8). Patch by Mark Villacampa. --- lib/motion/project/template/android.rb | 4 ++-- lib/motion/project/template/android/config.rb | 8 ++++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/lib/motion/project/template/android.rb b/lib/motion/project/template/android.rb index 2833d56c..1e5541ee 100644 --- a/lib/motion/project/template/android.rb +++ b/lib/motion/project/template/android.rb @@ -108,7 +108,7 @@ EOS # Compile and link payload library. libs_abi_subpath = "lib/#{App.config.armeabi_directory_name}" - libpayload_subpath = "#{libs_abi_subpath}/#{App.config.payload_library_name}" + libpayload_subpath = "#{libs_abi_subpath}/#{App.config.payload_library_filename}" libpayload_path = "#{app_build_dir}/#{libpayload_subpath}" if !File.exist?(libpayload_path) \ or ruby_objs_changed \ @@ -231,7 +231,7 @@ EOS java_file_txt << "\t#{method}\n" end if name == App.config.main_activity - java_file_txt << "\tstatic {\n\t\tSystem.load(\"#{App.config.payload_library_name}\");\n\t}\n" + java_file_txt << "\tstatic {\n\t\tSystem.loadLibrary(\"#{App.config.payload_library_name}\");\n\t}\n" end java_file_txt << "}\n" java_file = File.join(java_app_package_dir, name + '.java') diff --git a/lib/motion/project/template/android/config.rb b/lib/motion/project/template/android/config.rb index fc6a4cb4..6ba4f09d 100644 --- a/lib/motion/project/template/android/config.rb +++ b/lib/motion/project/template/android/config.rb @@ -150,12 +150,16 @@ module Motion; module Project; "#{cflags} -I\"#{ndk_path}/sources/cxx-stl/stlport/stlport\"" end + def payload_library_filename + "lib#{payload_library_name}.so" + end + def payload_library_name - 'libpayload.so' + 'payload' end def ldflags - "-Wl,-soname,#{payload_library_name} -shared --sysroot=\"#{ndk_path}/platforms/android-#{api_version}/arch-arm\" -lgcc -gcc-toolchain \"#{ndk_path}/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64\" -no-canonical-prefixes -target #{arch}-none-linux-androideabi -Wl,--no-undefined -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now" + "-Wl,-soname,#{payload_library_filename} -shared --sysroot=\"#{ndk_path}/platforms/android-#{api_version}/arch-arm\" -lgcc -gcc-toolchain \"#{ndk_path}/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64\" -no-canonical-prefixes -target #{arch}-none-linux-androideabi -Wl,--no-undefined -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now" end def versioned_datadir