Protobuf 安卓 NDK

Posted

技术标签:

【中文标题】Protobuf 安卓 NDK【英文标题】:Protobuf android NDK 【发布时间】:2015-08-26 04:49:23 【问题描述】:

我正在尝试使用 android studio 构建 protobuf 2.6.1 NDK,但我不知道如何将 protobuf 包含在 gradle 文件中,我也尝试过 Android.mk 和 eclipse 没有工作,请帮助我。

    LOCAL_PATH := $(call my-dir)
    include $(CLEAR_VARS)

    LOCAL_MODULE    := libprotobuf

    LOCAL_SRC_FILES :=\
    src/google/protobuf/descriptor_database.cc \
    src/google/protobuf/descriptor.cc \
    src/google/protobuf/descriptor.pb.cc \
    src/google/protobuf/dynamic_message.cc \
    src/google/protobuf/extension_set_heavy.cc \
    src/google/protobuf/extension_set.cc \
    src/google/protobuf/generated_message_reflection.cc \
    src/google/protobuf/generated_message_util.cc \
    src/google/protobuf/io/coded_stream.cc \
    src/google/protobuf/io/gzip_stream.cc \
    src/google/protobuf/io/printer.cc \
    src/google/protobuf/io/strtod.cc \
    src/google/protobuf/io/tokenizer.cc \
    src/google/protobuf/io/zero_copy_stream_impl_lite.cc \
    src/google/protobuf/io/zero_copy_stream_impl.cc \
    src/google/protobuf/io/zero_copy_stream.cc \
    src/google/protobuf/message_lite.cc \
    src/google/protobuf/message.cc \
    src/google/protobuf/reflection_ops.cc \
    src/google/protobuf/repeated_field.cc \
    src/google/protobuf/stubs/common.cc \
    src/google/protobuf/stubs/once.cc \
    src/google/protobuf/stubs/stringprintf.cc \
    src/google/protobuf/stubs/structurally_valid.cc \
    src/google/protobuf/stubs/strutil.cc \
    src/google/protobuf/stubs/substitute.cc \
    src/google/protobuf/text_format.cc \
    src/google/protobuf/unknown_field_set.cc \
    src/google/protobuf/wire_format_lite.cc \
    src/google/protobuf/wire_format.cc

    ifeq ($(TARGET_ARCH),x86)
    LOCAL_SRC_FILES := $(LOCAL_SRC_FILES) \
    src/google/protobuf/stubs/atomicops_internals_x86_gcc.cc

    endif

    LOCAL_CFLAGS := -D GOOGLE_PROTOBUF_NO_RTTI=1
    LOCAL_CPPFLAGS := -std=c++11
    LOCAL_C_INCLUDES = $(LOCAL_PATH)/src

    LOCAL_EXPORT_LDLIBS := -lz
    LOCAL_EXPORT_CFLAGS := $(LOCAL_CFLAGS)
    LOCAL_EXPORT_CPPFLAGS := $(LOCAL_CPPFLAGS)
    LOCAL_EXPORT_C_INCLUDES := $(LOCAL_C_INCLUDES)

    include $(BUILD_STATIC_LIBRARY)

【问题讨论】:

“我已经尝试过 Android.mk 和 eclipse 都没有工作” 那么你应该在你的问题中包含那个 Android.mk 文件。其他人不可能仅仅通过阅读“你已经尝试过”就知道你可能做错了什么。 您在尝试使用此 makefile 构建时遇到哪些错误? @Michael 我跟着this 摆脱了它。但我得到没有规则来制作目标 jni/src/google/protobuf/stubs/common.cc。任何我缺少的建议! 【参考方案1】:

我在我的项目中添加了新模块并将其命名为 proto。这是我的 gradle 文件:

apply plugin: 'protobuf'

buildscript 
    repositories 
        mavenCentral()
    
    dependencies 
        classpath 'ws.antonov.gradle.plugins:gradle-plugin-protobuf:0.9.1'
    


dependencies 
    compile 'com.google.protobuf:protobuf-java:2.6.0'


protocPath = 'C:/Users/Paul/proto/protoc'
extractedProtosDir = "$project.buildDir.path/extracted-protos"
generatedFileDir = "$projectDir/src/main/java"
//protobufCodeGenPlugins = ['foo:./protoc-gen-foo', 'bar']

dependencies 
    // If you have your protos archived in a tar file, you can specify that as a dependency
    //   ... alternative archive types supported are: jar, tar, tar.gz, tar.bz2, zip
    protobuf files("src/main/protos/dungeon.proto")
    // Different configuration fileSets are supported
    //testProtobuf files("src/main/java")

然后在我的应用 build.gradle 我添加了compile project(':proto')

最后在我的 settings.gradle 我有include ':app', ':proto'

希望对你有帮助

【讨论】:

以上是关于Protobuf 安卓 NDK的主要内容,如果未能解决你的问题,请参考以下文章

protobuf 怎么查看版本

android ndk是啥

yolov5 6.0版本->onnx->ncnn +安卓部署 附加ncnn环境配置 保姆级详细教程

android ndk是啥

为啥安卓手机没有运营商配置文件更新 而IOS就要?

protobuf动态解析