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.
This commit is contained in:
Laurent Sansonetti
2014-08-09 11:15:51 +02:00
parent 39c8890c08
commit ee36b4b967
2 changed files with 8 additions and 4 deletions

View File

@@ -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')

View File

@@ -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