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

后端 未结 1 678
佛祖请我去吃肉
佛祖请我去吃肉 2021-01-07 01:55

The earlier protobuf version 3.0 was easily integrated. But there are issues with the latest version 3.2. It simply compiles & builds all the un-related Android .cc file

相关标签:
1条回答
  • 2021-01-07 02:13

    Using cross platform Android Standalone Tool chain and provided build script may result in larger size of Shared library file(.so), generated due to unwanted files included in build script.You can create your own Android.mk file which includes only required core part of the library. Generated library files can be used as pre built library in other Android projects. Please check bellow steps for second option of creating own script files.

    1. Download latest Android Google Protobuf source from Git Source Repository.
    2. Create New Android application project. Create directory by name jni inside application project.
    3. Run following commands from the downloaded source directory.

    ./autogen.sh

    ./configure

    1. Place downloaded source code inside jni directory.
    2. Place bellow Android.mk and Application.mk file inside 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 required .so files will be generated inside libs folder of the project directory.
    0 讨论(0)
提交回复
热议问题