Android Studio NDK编译protobuf库

1.在Android studio 里面有plugin 可以直接配置使用protobuf,但是如果想要在jni里面的c++上使用,就需要自己编译了。

2. 编译环境:Win10,Android studio 4.0.1

      a.先去下载protobuf 源码:https://github.com/protocolbuffers/protobuf

      b.将解压后的src下面的Google文件夹直接复制到jni下面去。

      c.在Android.mk里面添加如下代码:

include $(CLEAR_VARS)
LOCAL_MODULE := protobuf

LOCAL_SRC_FILES :=  ../google/protobuf/stubs/bytestream.cc                          \
				 	../google/protobuf/stubs/bytestream.h                           \
				 	../google/protobuf/stubs/common.cc                              \
				 	../google/protobuf/stubs/hash.h                                 \
				 	../google/protobuf/stubs/int128.cc                              \
				 	../google/protobuf/stubs/int128.h                               \
				 	../google/protobuf/io/io_win32.cc                               \
				 	../google/protobuf/stubs/map_util.h                             \
				 	../google/protobuf/stubs/mathutil.h                             \
				 	../google/protobuf/stubs/status.cc                              \
				 	../google/protobuf/stubs/status.h                               \
				 	../google/protobuf/stubs/status_macros.h                        \
				 	../google/protobuf/stubs/statusor.cc                            \
				 	../google/protobuf/stubs/statusor.h                             \
				 	../google/protobuf/stubs/stringpiece.cc                         \
				 	../google/protobuf/stubs/stringpiece.h                          \
				 	../google/protobuf/stubs/stringprintf.cc                        \
				 	../google/protobuf/stubs/stringprintf.h                         \
				 	../google/protobuf/stubs/structurally_valid.cc                  \
				 	../google/protobuf/stubs/strutil.cc                             \
				 	../google/protobuf/stubs/time.cc                                \
				 	../google/protobuf/stubs/time.h                                 \
				 	../google/protobuf/any_lite.cc                                  \
				 	../google/protobuf/arena.cc                                     \
				 	../google/protobuf/arenastring.cc                               \
				 	../google/protobuf/extension_set.cc                             \
				 	../google/protobuf/generated_enum_util.cc                       \
				 	../google/protobuf/generated_message_util.cc                    \
				 	../google/protobuf/generated_message_table_driven_lite.h        \
				 	../google/protobuf/generated_message_table_driven_lite.cc       \
				 	../google/protobuf/implicit_weak_message.cc                     \
				 	../google/protobuf/map.cc                                       \
				 	../google/protobuf/message_lite.cc                              \
				 	../google/protobuf/parse_context.cc                             \
				 	../google/protobuf/repeated_field.cc                            \
				 	../google/protobuf/wire_format_lite.cc                          \
				 	../google/protobuf/io/coded_stream.cc                           \
				 	../google/protobuf/io/strtod.cc                                 \
				 	../google/protobuf/io/zero_copy_stream.cc                       \
				 	../google/protobuf/io/zero_copy_stream_impl.cc                  \
				 	../google/protobuf/io/zero_copy_stream_impl_lite.cc             \
				 	../google/protobuf/any.pb.cc                                    \
				   	../google/protobuf/api.pb.cc                                    \
				   	../google/protobuf/any.cc                                       \
					../google/protobuf/descriptor.cc                                \
					../google/protobuf/descriptor_database.cc                       \
				   ../google/protobuf/descriptor.pb.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/generated_message_table_driven_lite.h        \
				   ../google/protobuf/generated_message_table_driven.cc            \
				   ../google/protobuf/map_field.cc                                 \
				   ../google/protobuf/message.cc                                   \
				   ../google/protobuf/reflection_internal.h                        \
				   ../google/protobuf/reflection_ops.cc                            \
				   ../google/protobuf/service.cc                                   \
				   ../google/protobuf/source_context.pb.cc                         \
				   ../google/protobuf/struct.pb.cc                                 \
				   ../google/protobuf/stubs/substitute.cc                          \
				   ../google/protobuf/stubs/substitute.h                           \
				   ../google/protobuf/text_format.cc                               \
				   ../google/protobuf/timestamp.pb.cc                              \
				   ../google/protobuf/type.pb.cc                                   \
				   ../google/protobuf/unknown_field_set.cc                         \
				   ../google/protobuf/wire_format.cc                               \
				   ../google/protobuf/wrappers.pb.cc                               \
				   ../google/protobuf/io/gzip_stream.cc                            \
				   ../google/protobuf/io/printer.cc                                \
				   ../google/protobuf/io/tokenizer.cc                              \
				   ../google/protobuf/compiler/importer.cc                         \
				   ../google/protobuf/compiler/parser.cc                           \
				   ../google/protobuf/util/delimited_message_util.cc               \
				   ../google/protobuf/util/field_comparator.cc                     \
				   ../google/protobuf/util/field_mask_util.cc                      \
				   ../google/protobuf/util/internal/constants.h                    \
				   ../google/protobuf/util/internal/datapiece.cc                   \
				   ../google/protobuf/util/internal/datapiece.h                    \
				   ../google/protobuf/util/internal/default_value_objectwriter.cc  \
				   ../google/protobuf/util/internal/default_value_objectwriter.h   \
				   ../google/protobuf/util/internal/error_listener.cc              \
				   ../google/protobuf/util/internal/error_listener.h               \
				   ../google/protobuf/util/internal/expecting_objectwriter.h       \
				   ../google/protobuf/util/internal/field_mask_utility.cc          \
				   ../google/protobuf/util/internal/field_mask_utility.h           \
				   ../google/protobuf/util/internal/json_escaping.cc               \
				   ../google/protobuf/util/internal/json_escaping.h                \
				   ../google/protobuf/util/internal/json_objectwriter.cc           \
				   ../google/protobuf/util/internal/json_objectwriter.h            \
				   ../google/protobuf/util/internal/json_stream_parser.cc          \
				   ../google/protobuf/util/internal/json_stream_parser.h           \
				   ../google/protobuf/util/internal/location_tracker.h             \
				   ../google/protobuf/util/internal/mock_error_listener.h          \
				   ../google/protobuf/util/internal/object_location_tracker.h      \
				   ../google/protobuf/util/internal/object_source.h                \
				   ../google/protobuf/util/internal/object_writer.cc               \
				   ../google/protobuf/util/internal/object_writer.h                \
				   ../google/protobuf/util/internal/protostream_objectsource.cc    \
				   ../google/protobuf/util/internal/protostream_objectsource.h     \
				   ../google/protobuf/util/internal/protostream_objectwriter.cc    \
				   ../google/protobuf/util/internal/protostream_objectwriter.h     \
				   ../google/protobuf/util/internal/proto_writer.cc                \
				   ../google/protobuf/util/internal/proto_writer.h                 \
				   ../google/protobuf/util/internal/structured_objectwriter.h      \
				   ../google/protobuf/util/internal/type_info.cc                   \
				   ../google/protobuf/util/internal/type_info.h                    \
				   ../google/protobuf/util/internal/type_info_test_helper.cc       \
				   ../google/protobuf/util/internal/type_info_test_helper.h        \
				   ../google/protobuf/util/internal/utility.cc                     \
				   ../google/protobuf/util/internal/utility.h                      \
				   ../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


LOCAL_C_INCLUDES := 下载的目录/src

include $(BUILD_SHARED_LIBRARY)

上面的../google是因为我的Android.mk不在jni目录下面,如果是在jni下面 就去掉前面的../ 路径这东西 大家应该都懂。

上面编译的是3.14.x版本 

但如果用的是3.0.x版本的话 文件就要修改如下:

LOCAL_SRC_FILES :=      ../google/protobuf/stubs/atomicops_internals_x86_gcc.cc         \
                        ../google/protobuf/stubs/atomicops_internals_x86_msvc.cc        \
                        ../google/protobuf/stubs/bytestream.cc                          \
                        ../google/protobuf/stubs/bytestream.h                           \
                        ../google/protobuf/stubs/common.cc                              \
                        ../google/protobuf/stubs/hash.h                                 \
                        ../google/protobuf/stubs/int128.cc                              \
                        ../google/protobuf/stubs/int128.h                               \
                        ../google/protobuf/stubs/mathutil.h                             \
                        ../google/protobuf/stubs/once.cc                                \
                        ../google/protobuf/stubs/shared_ptr.h                           \
                        ../google/protobuf/stubs/status.cc                              \
                        ../google/protobuf/stubs/status.h                               \
                        ../google/protobuf/stubs/status_macros.h                        \
                        ../google/protobuf/stubs/statusor.cc                            \
                        ../google/protobuf/stubs/statusor.h                             \
                        ../google/protobuf/stubs/stringpiece.cc                         \
                        ../google/protobuf/stubs/stringpiece.h                          \
                        ../google/protobuf/stubs/stringprintf.cc                        \
                        ../google/protobuf/stubs/stringprintf.h                         \
                        ../google/protobuf/stubs/structurally_valid.cc                  \
                        ../google/protobuf/stubs/strutil.cc                             \
                        ../google/protobuf/stubs/strutil.h                              \
                        ../google/protobuf/stubs/time.cc                                \
                        ../google/protobuf/stubs/time.h                                 \
                        ../google/protobuf/arena.cc                                     \
                        ../google/protobuf/arenastring.cc                               \
                        ../google/protobuf/extension_set.cc                             \
                        ../google/protobuf/generated_message_util.cc                    \
                        ../google/protobuf/message_lite.cc                              \
                        ../google/protobuf/repeated_field.cc                            \
                        ../google/protobuf/wire_format_lite.cc                          \
                        ../google/protobuf/io/coded_stream.cc                           \
                        ../google/protobuf/io/coded_stream_inl.h                        \
                        ../google/protobuf/io/zero_copy_stream.cc                       \
                        ../google/protobuf/io/zero_copy_stream_impl_lite.cc

 

你可能感兴趣的:(Android,OpenGL,ES,2.0,Android,Studio,protobuf,ndk,android,jni)