How to integrate / install the latest C ++ protobuf (3.2) with Android NDK?

An earlier version of protobuf 3.0 was easily integrated. But there are problems with the latest version 3.2. It simply compiles and creates all non-associated components of the .cc file. Android
If we follow the path to the last branch in git for C ++ proto and create it in accordance with the steps, then it generates a 15 MB .SO file, unlike the previous one, which was ~ 1-2 MB.

How to optimally integrate the latest protobuf into Android?

+2
source share
1 answer

Using the cross platform Android Standalone Tool chain and provided that the build script can lead to a larger shared library file (.so) created due to unwanted files included in the script assembly. You can create your own Android.mk file, which includes only the necessary main part of the library. The generated library files can be used as a pre-built library in other Android projects. Please check the steps below for the second option to create your own script files.

  • Download the latest Google Google Protobuf source from the Git Repository Source .
  • Create a new Android app project. Create a directory named jni inside the application project.
  • Run the following commands from the loaded source directory.

./autogen.sh

./Configure

  1. Put the downloaded source code inside the jni directory.
  2. Put below Android.mk and the Application.mk file inside the jni directory.

Android.mk

  LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) c_includes := $(LOCAL_PATH) LOCAL_MODULE := libprotobuf LOCAL_SRC_FILES := \ google/protobuf/arena.cc \ google/protobuf/arenastring.cc \ google/protobuf/extension_set.cc \ google/protobuf/generated_message_util.cc \ google/protobuf/io/coded_stream.cc \ google/protobuf/io/zero_copy_stream.cc \ google/protobuf/io/zero_copy_stream_impl_lite.cc \ google/protobuf/message_lite.cc \ google/protobuf/repeated_field.cc \ google/protobuf/stubs/atomicops_internals_x86_gcc.cc \ google/protobuf/stubs/atomicops_internals_x86_msvc.cc \ google/protobuf/stubs/bytestream.cc \ google/protobuf/stubs/common.cc \ google/protobuf/stubs/int128.cc \ google/protobuf/stubs/once.cc \ google/protobuf/stubs/status.cc \ google/protobuf/stubs/statusor.cc \ google/protobuf/stubs/stringpiece.cc \ google/protobuf/stubs/stringprintf.cc \ google/protobuf/stubs/structurally_valid.cc \ google/protobuf/stubs/strutil.cc \ google/protobuf/stubs/time.cc \ google/protobuf/wire_format_lite.cc \ google/protobuf/any.cc \ google/protobuf/any.pb.cc \ google/protobuf/api.pb.cc \ google/protobuf/compiler/importer.cc \ google/protobuf/compiler/parser.cc \ google/protobuf/descriptor.cc \ google/protobuf/descriptor.pb.cc \ google/protobuf/descriptor_database.cc \ google/protobuf/duration.pb.cc \ google/protobuf/dynamic_message.cc \ google/protobuf/empty.pb.cc \ google/protobuf/extension_set_heavy.cc \ google/protobuf/field_mask.pb.cc \ google/protobuf/generated_message_reflection.cc \ google/protobuf/io/gzip_stream.cc \ google/protobuf/io/printer.cc \ google/protobuf/io/strtod.cc \ google/protobuf/io/tokenizer.cc \ google/protobuf/io/zero_copy_stream_impl.cc \ google/protobuf/map_field.cc \ google/protobuf/message.cc \ google/protobuf/reflection_ops.cc \ google/protobuf/service.cc \ google/protobuf/source_context.pb.cc \ google/protobuf/struct.pb.cc \ google/protobuf/stubs/mathlimits.cc \ google/protobuf/stubs/substitute.cc \ google/protobuf/text_format.cc \ google/protobuf/timestamp.pb.cc \ google/protobuf/type.pb.cc \ google/protobuf/unknown_field_set.cc \ google/protobuf/util/field_comparator.cc \ google/protobuf/util/field_mask_util.cc \ google/protobuf/util/internal/datapiece.cc \ google/protobuf/util/internal/default_value_objectwriter.cc \ google/protobuf/util/internal/error_listener.cc \ google/protobuf/util/internal/field_mask_utility.cc \ google/protobuf/util/internal/json_escaping.cc \ google/protobuf/util/internal/json_objectwriter.cc \ google/protobuf/util/internal/json_stream_parser.cc \ google/protobuf/util/internal/object_writer.cc \ google/protobuf/util/internal/proto_writer.cc \ google/protobuf/util/internal/protostream_objectsource.cc \ google/protobuf/util/internal/protostream_objectwriter.cc \ google/protobuf/util/internal/type_info.cc \ google/protobuf/util/internal/type_info_test_helper.cc \ google/protobuf/util/internal/utility.cc \ google/protobuf/util/json_util.cc \ google/protobuf/util/message_differencer.cc \ google/protobuf/util/time_util.cc \ google/protobuf/util/type_resolver_util.cc \ google/protobuf/wire_format.cc \ google/protobuf/wrappers.pb.cc \ google/protobuf/compiler/code_generator.cc \ google/protobuf/compiler/command_line_interface.cc \ google/protobuf/compiler/cpp/cpp_enum.cc \ google/protobuf/compiler/cpp/cpp_enum_field.cc \ google/protobuf/compiler/cpp/cpp_extension.cc \ google/protobuf/compiler/cpp/cpp_field.cc \ google/protobuf/compiler/cpp/cpp_file.cc \ google/protobuf/compiler/cpp/cpp_generator.cc \ google/protobuf/compiler/cpp/cpp_helpers.cc \ google/protobuf/compiler/cpp/cpp_map_field.cc \ google/protobuf/compiler/cpp/cpp_message.cc \ google/protobuf/compiler/cpp/cpp_message_field.cc \ google/protobuf/compiler/cpp/cpp_primitive_field.cc \ google/protobuf/compiler/cpp/cpp_service.cc \ google/protobuf/compiler/cpp/cpp_string_field.cc \ google/protobuf/compiler/plugin.cc \ google/protobuf/compiler/plugin.pb.cc \ google/protobuf/compiler/python/python_generator.cc \ google/protobuf/compiler/ruby/ruby_generator.cc \ google/protobuf/compiler/subprocess.cc \ google/protobuf/compiler/zip_writer.cc \ LOCAL_CFLAGS := -D GOOGLE_PROTOBUF_NO_RTTI=1 LOCAL_CPPFLAGS := -std=c++11 LOCAL_C_INCLUDES = $(LOCAL_PATH)/android LOCAL_C_INCLUDES += ${ANDROID_NDK}/sources/cxx-stl/gnu- libstdc++/4.8/include LOCAL_LDLIBS += -lz LOCAL_EXPORT_LDLIBS += -lz LOCAL_EXPORT_CFLAGS := $(LOCAL_CFLAGS) LOCAL_EXPORT_CPPFLAGS := $(LOCAL_CPPFLAGS) LOCAL_EXPORT_C_INCLUDES := $(LOCAL_C_INCLUDES) include $(BUILD_SHARED_LIBRARY) 

Application.mk

 APP_STL :=gnustl_shared # gnustl_static NDK_TOOLCHAIN_VERSION := 4.9 APP_ABI := all LIBCXX_FORCE_REBUILD := true APP_PLATFORM:=android-9 NDK_DEBUG:=1 
  1. Run ndk-build and the required .so files will be generated inside the libs folder of the project directory.
+2
source

Source: https://habr.com/ru/post/1274360/


All Articles