diff --git a/mediapipe/render/module/render_queue/BUILD b/mediapipe/render/module/render_queue/BUILD index 087c7a628..785e15442 100644 --- a/mediapipe/render/module/render_queue/BUILD +++ b/mediapipe/render/module/render_queue/BUILD @@ -1,10 +1,5 @@ load("@build_bazel_rules_apple//apple:ios.bzl", "ios_framework") -load("@build_bazel_rules_android//android:rules.bzl", "android_library") - - - - GL_BASE_LINK_OPTS = select({ "//conditions:default": [], "//mediapipe:android": [ @@ -108,8 +103,8 @@ cc_library( "OlaRenderIMP.h", ], # Use -Dverbose=-1 to turn off zlib's trace logging. (#3280) - linkstatic = True, - linkopts = GL_BASE_LINK_OPTS_OSS, + # linkstatic = True, + # linkopts = GL_BASE_LINK_OPTS_OSS, includes = ["."], visibility = ["//visibility:public"], deps = [ @@ -169,15 +164,4 @@ ios_framework( deps = [ "//mediapipe/render/module/render_queue:OlaRenderLibrary", ], -) - -####### android ######## -android_library( - name = "ola_render", - srcs = [ - "src/com/ola/render/RenderJni.java" - ], - deps = [ - "//mediapipe/render/module/render_queue:olarender", - ], ) \ No newline at end of file diff --git a/mediapipe/render/module/render_queue/OlaRender.h b/mediapipe/render/module/render_queue/OlaRender.h index 55705fba3..05967c1e5 100644 --- a/mediapipe/render/module/render_queue/OlaRender.h +++ b/mediapipe/render/module/render_queue/OlaRender.h @@ -21,7 +21,7 @@ #define USE_NEED_RECREATE 0 #include -// #include "macros.h" +#include "macros.h" #if USE_OLARENDER #include @@ -30,12 +30,10 @@ #endif #endif -// #if PLATFORM == PLATFORM_IOS -#ifdef __APPLE__ +#if PLATFORM == PLATFORM_IOS #import #import -// #elif PLATFORM == PLATFORM_ANDROID -#else +#elif PLATFORM == PLATFORM_ANDROID #include #include diff --git a/mediapipe/render/module/render_queue/ola_aar.bzl b/mediapipe/render/module/render_queue/ola_aar.bzl new file mode 100644 index 000000000..52f515ccf --- /dev/null +++ b/mediapipe/render/module/render_queue/ola_aar.bzl @@ -0,0 +1,107 @@ +#Package: com.ola.render +#Description: +#Author: 王强 + + +load("@build_bazel_rules_android//android:rules.bzl", "android_binary", "android_library") + + +def ola_aar(name, + srcs = [], + assets = [], + proguard_specs = [], + assets_dir = "" ): + + _ola_jni( + name = name + "_jni", + ) + + native.genrule( + name = name + "_aar_manifest_generator", + outs = ["AndroidManifest.xml"], + cmd = """ +cat > $(OUTS) < + + + +EOF +""", + ) + + android_library( + name = name + "_android_lib", + srcs = srcs, + manifest = "AndroidManifest.xml", + proguard_specs = proguard_specs, + assets = assets, + assets_dir = assets_dir, + deps = [ + ":" + name + "_jni_cc_lib",] + ) + + _ola_aar_with_jni(name, name + "_android_lib") + + + +def _ola_jni(name): + native.cc_binary( + name = "libora_render_jni.so", + linkshared = 1, + linkstatic = 1, + deps = [ + "//mediapipe/render/module/render_queue:olarender", + ], + ) + + native.cc_library( + name = name + "_cc_lib", + srcs = [":libora_render_jni.so"], + alwayslink = 1, + ) + +def _ola_aar_with_jni(name, android_library): + # Generates dummy AndroidManifest.xml for dummy apk usage + # (dummy apk is generated by _dummy_app target below) + native.genrule( + name = name + "_binary_manifest_generator", + outs = [name + "_generated_AndroidManifest.xml"], + cmd = """ +cat > $(OUTS) < + + +EOF +""", + ) + + # Generates dummy apk including .so files. + # We extract out .so files and throw away the apk. + android_binary( + name = name + "_dummy_app", + manifest = name + "_generated_AndroidManifest.xml", + custom_package = "dummy.package.for.so", + multidex = "native", + deps = [android_library], + ) + + native.genrule( + name = name, + srcs = [android_library + ".aar", name + "_dummy_app_unsigned.apk"], + outs = [name + ".aar"], + tags = ["manual"], + cmd = """ +cp $(location {}.aar) $(location :{}.aar) +chmod +w $(location :{}.aar) +origdir=$$PWD +cd $$(mktemp -d) +unzip $$origdir/$(location :{}_dummy_app_unsigned.apk) "lib/*" +cp -r lib jni +zip -r $$origdir/$(location :{}.aar) jni/*/*.so +""".format(android_library, name, name, name, name), + ) \ No newline at end of file diff --git a/mediapipe/render/module/render_queue/src/com/ola/render/BUILD b/mediapipe/render/module/render_queue/src/com/ola/render/BUILD new file mode 100644 index 000000000..82130b271 --- /dev/null +++ b/mediapipe/render/module/render_queue/src/com/ola/render/BUILD @@ -0,0 +1,19 @@ +load("//mediapipe/render/module/render_queue:ola_aar.bzl", "ola_aar") + + +android_library( + name = "RenderJni", + srcs = ["RenderJni.java"], + deps = [], +) + +ola_aar( + name = "ola_render", + srcs = [ + "RenderJni.java" + ], + proguard_specs = ["proguard.pgcfg"], + # deps = [ + # "//mediapipe/render/module/render_queue:olarender", + # ], + ) diff --git a/mediapipe/render/module/render_queue/src/com/ola/render/proguard.pgcfg b/mediapipe/render/module/render_queue/src/com/ola/render/proguard.pgcfg new file mode 100644 index 000000000..34dce63d0 --- /dev/null +++ b/mediapipe/render/module/render_queue/src/com/ola/render/proguard.pgcfg @@ -0,0 +1,29 @@ +# Additional flags to pass to Proguard when processing a binary that uses +# MediaPipe. + +# Keep public members of our public interfaces. This also prevents the +# obfuscation of the corresponding methods in classes implementing them, +# such as implementations of PacketCallback#process. +-keep public interface com.google.mediapipe.framework.* { + public *; +} + +# This method is invoked by native code. +-keep public class com.google.mediapipe.framework.Packet { + public static *** create(***); + public long getNativeHandle(); + public void release(); +} + +# This method is invoked by native code. +-keep public class com.google.mediapipe.framework.PacketCreator { + *** releaseWithSyncToken(...); +} + +# This method is invoked by native code. +-keep public class com.google.mediapipe.framework.MediaPipeException { + (int, byte[]); +} + +# Required to use PacketCreator#createProto +-keep class com.google.mediapipe.framework.ProtoUtil$SerializedMessage { *; }