Google'ın protokol arabellek kitaplığının yerel bir sürümünü oluşturmak istiyorum.
Bunu nasıl yaparım?Android için protokol arabelleği oluşturma NDK
cevap
Bu Android.mk kullanın ve bir çok Android.mk yukarıda belirtilen BAŞARILI
# Copyright (C) 2009 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
#
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
CC_LITE_SRC_FILES := \
src/google/protobuf/stubs/common.cc \
src/google/protobuf/stubs/once.cc \
src/google/protobuf/stubs/hash.cc \
src/google/protobuf/extension_set.cc \
src/google/protobuf/generated_message_util.cc \
src/google/protobuf/message_lite.cc \
src/google/protobuf/repeated_field.cc \
src/google/protobuf/wire_format_lite.cc \
src/google/protobuf/io/coded_stream.cc \
src/google/protobuf/io/zero_copy_stream.cc \
src/google/protobuf/io/zero_copy_stream_impl_lite.cc
COMPILER_SRC_FILES := \
src/google/protobuf/descriptor.cc \
src/google/protobuf/descriptor.pb.cc \
src/google/protobuf/descriptor_database.cc \
src/google/protobuf/dynamic_message.cc \
src/google/protobuf/extension_set.cc \
src/google/protobuf/extension_set_heavy.cc \
src/google/protobuf/generated_message_reflection.cc \
src/google/protobuf/generated_message_util.cc \
src/google/protobuf/message.cc \
src/google/protobuf/message_lite.cc \
src/google/protobuf/reflection_ops.cc \
src/google/protobuf/repeated_field.cc \
src/google/protobuf/service.cc \
src/google/protobuf/text_format.cc \
src/google/protobuf/unknown_field_set.cc \
src/google/protobuf/wire_format.cc \
src/google/protobuf/wire_format_lite.cc \
src/google/protobuf/compiler/code_generator.cc \
src/google/protobuf/compiler/command_line_interface.cc \
src/google/protobuf/compiler/importer.cc \
src/google/protobuf/compiler/main.cc \
src/google/protobuf/compiler/parser.cc \
src/google/protobuf/compiler/plugin.cc \
src/google/protobuf/compiler/plugin.pb.cc \
src/google/protobuf/compiler/subprocess.cc \
src/google/protobuf/compiler/zip_writer.cc \
src/google/protobuf/compiler/cpp/cpp_enum.cc \
src/google/protobuf/compiler/cpp/cpp_enum_field.cc \
src/google/protobuf/compiler/cpp/cpp_extension.cc \
src/google/protobuf/compiler/cpp/cpp_field.cc \
src/google/protobuf/compiler/cpp/cpp_file.cc \
src/google/protobuf/compiler/cpp/cpp_generator.cc \
src/google/protobuf/compiler/cpp/cpp_helpers.cc \
src/google/protobuf/compiler/cpp/cpp_message.cc \
src/google/protobuf/compiler/cpp/cpp_message_field.cc \
src/google/protobuf/compiler/cpp/cpp_primitive_field.cc \
src/google/protobuf/compiler/cpp/cpp_service.cc \
src/google/protobuf/compiler/cpp/cpp_string_field.cc \
src/google/protobuf/compiler/java/java_enum.cc \
src/google/protobuf/compiler/java/java_enum_field.cc \
src/google/protobuf/compiler/java/java_extension.cc \
src/google/protobuf/compiler/java/java_field.cc \
src/google/protobuf/compiler/java/java_file.cc \
src/google/protobuf/compiler/java/java_generator.cc \
src/google/protobuf/compiler/java/java_helpers.cc \
src/google/protobuf/compiler/java/java_message.cc \
src/google/protobuf/compiler/java/java_message_field.cc \
src/google/protobuf/compiler/java/java_primitive_field.cc \
src/google/protobuf/compiler/java/java_service.cc \
src/google/protobuf/compiler/javamicro/javamicro_enum.cc \
src/google/protobuf/compiler/javamicro/javamicro_enum_field.cc \
src/google/protobuf/compiler/javamicro/javamicro_field.cc \
src/google/protobuf/compiler/javamicro/javamicro_file.cc \
src/google/protobuf/compiler/javamicro/javamicro_generator.cc \
src/google/protobuf/compiler/javamicro/javamicro_helpers.cc \
src/google/protobuf/compiler/javamicro/javamicro_message.cc \
src/google/protobuf/compiler/javamicro/javamicro_message_field.cc \
src/google/protobuf/compiler/javamicro/javamicro_primitive_field.cc \
src/google/protobuf/compiler/python/python_generator.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/tokenizer.cc \
src/google/protobuf/io/zero_copy_stream.cc \
src/google/protobuf/io/zero_copy_stream_impl.cc \
src/google/protobuf/io/zero_copy_stream_impl_lite.cc \
src/google/protobuf/stubs/common.cc \
src/google/protobuf/stubs/hash.cc \
src/google/protobuf/stubs/once.cc \
src/google/protobuf/stubs/structurally_valid.cc \
src/google/protobuf/stubs/strutil.cc \
src/google/protobuf/stubs/substitute.cc
# C++ full library
# =======================================================
#include $(CLEAR_VARS)
LOCAL_MODULE := libprotobuf
LOCAL_MODULE_TAGS := optional
LOCAL_CPP_EXTENSION := .cc
LOCAL_SRC_FILES := \
$(CC_LITE_SRC_FILES) \
src/google/protobuf/stubs/strutil.cc \
src/google/protobuf/stubs/substitute.cc \
src/google/protobuf/stubs/structurally_valid.cc \
src/google/protobuf/descriptor.cc \
src/google/protobuf/descriptor.pb.cc \
src/google/protobuf/descriptor_database.cc \
src/google/protobuf/dynamic_message.cc \
src/google/protobuf/extension_set_heavy.cc \
src/google/protobuf/generated_message_reflection.cc \
src/google/protobuf/message.cc \
src/google/protobuf/reflection_ops.cc \
src/google/protobuf/service.cc \
src/google/protobuf/text_format.cc \
src/google/protobuf/unknown_field_set.cc \
src/google/protobuf/wire_format.cc \
src/google/protobuf/io/gzip_stream.cc \
src/google/protobuf/io/printer.cc \
src/google/protobuf/io/tokenizer.cc \
src/google/protobuf/io/zero_copy_stream_impl.cc \
src/google/protobuf/compiler/importer.cc \
src/google/protobuf/compiler/parser.cc
LOCAL_C_INCLUDES := \
$(LOCAL_PATH)/src
LOCAL_C_INCLUDES := \
$(LOCAL_PATH)/android \
bionic \
$(LOCAL_PATH)/src \
$(JNI_H_INCLUDE)
LOCAL_SHARED_LIBRARIES := \
libz libcutils libutils
LOCAL_LDLIBS := -lz
# stlport conflicts with the host stl library
ifneq ($(TARGET_SIMULATOR),true)
LOCAL_C_INCLUDES += external/stlport/stlport
LOCAL_SHARED_LIBRARIES += libstlport
endif
# Define the header files to be copied
#LOCAL_COPY_HEADERS := \
# src/google/protobuf/stubs/once.h \
# src/google/protobuf/stubs/common.h \
# src/google/protobuf/io/coded_stream.h \
# src/google/protobuf/generated_message_util.h \
# src/google/protobuf/repeated_field.h \
# src/google/protobuf/extension_set.h \
# src/google/protobuf/wire_format_lite_inl.h
#
#LOCAL_COPY_HEADERS_TO := $(LOCAL_MODULE)
LOCAL_CFLAGS := -DGOOGLE_PROTOBUF_NO_RTTI
include $(BUILD_SHARED_LIBRARY)
Bu biraz güncel değil. Protobuf 2.4.1 hash.cc için mevcut değil, bu yüzden kaldırılmalıdır. Eğer protobug 2.5.0 kadar gidiyorsa, aynı anlaşma artı önerdiğiniz düzenlemeler yaparken src/google/protobuf/stubs/stringprintf.cc – gkanwar
@ gkanwar eklemeniz gerekiyorsa, lib derler ama denediğimde bu hatayı alıyorum protobuf libs'e bağlı olan yöntemimi ara: Nedeni: java.lang.UnsatisfiedLinkError: Kitaplık yüklenemiyor: reloc_library [1306]: 37 'strtof' yerini alamıyor ... "nm" kullanarak strtof yönteminin listelendiğini fark ediyorum ancak yanında listelenen "U" harfi var. Protobuf'un çalışması için gerekli olan bir kütüphane var mı? –
@MichaelNguyen strtof, stl kütüphanesinde yaşamalıdır. libprotobuf stlport kullanır; cevapta açıklanan yapı dosyası onu statik değil paylaşılan bir kitaplık olarak bağlar, bu yüzden libstlport'u da Java'dan yüklemelisiniz. Burada çalıştığım bir projede çalışan bir örnek bulabilirsiniz: https://github.com/IDKJava/the-elements/blob/master/TheElements-dev/src/com/idkjava/thelements/MainActivity.java # L605 – gkanwar
çalışıyor sayesinde kurmak.
Android için protobuf oluşturmak için tüm adımları açıklamak istiyorum.
Android için kaynakları yapılandırın. kullanın Aşağıdaki komut dosyası (: http://habrahabr.ru/post/119693/ burada var):
önceden oluşturulmuş =/Users/kullanıcı/android-ndk--R7b/toolchain/kol-linux-androideabi-4.4.3
PLATFORMU =/Users/user/android-ndk-r7b/platformlar/android-3/arch-arm/
ihracat CC = "/ Kullanıcılar/kullanıcı/android-ndk-r7b/araç zincirleri/arm-linux-androideabi- 4.4.3/prebuilt/darwin-x86/bin/arm-linux-androideabi-gcc"
ihracat CFLAGS = "- FPIC -DANDROID -nostdlib"
ihracat ANDROID_ROOT = "/ Users/kullanıcı/android-ndk--R7b"
ihracat LDFLAGS = "- wı, -rpath-link = $ ANDROID_ROOT/platformlar/android-3/ezeli kol/usr/lib/-L $ ANDROID_ROOT/platformlar/android-3/ezeli kol/usr/lib /"
ihracat CPPFLAGS = "- Ben $ ANDROID_ROOT/platformlar/android-3/ezeli kol/usr/include /"
ihracat LIBS = "- lc"
./configure --host =
kol-EABI aşağıdaki satırları fr Sil om, yukarıda sözü edilen Android.mk dosyasında belirtilmiştir:
src/google/protobuf/stubs/strutil.cc \ src/google/protobuf/stubs/substitute.cc \ src/google/protobuf/stubs/structurally_valid.cc \ src/google/protobuf/descriptor.cc \ src/google/protobuf/descriptor.pb.cc \ src/google/protobuf/descriptor_database.cc \ src/google/protobuf/dynamic_message.cc \ src/google/protobuf/extension_set_heavy.cc \ src/google/protobuf/generated_message_reflection.cc \ src/google/protobuf/message.cc \ src/google/protobuf/reflection_ops.cc \ src/google/protobuf/service.cc \ src/google/protobuf/text_format.cc \ src/google/protobuf/unknown_field_set.cc \ src/google/protobuf/wire_format.cc \ src/google/protobuf/io/gzip_stream.cc \ src/google/protobuf/io/printer.cc \ src/google/protobuf/io/tokenizer.cc \ src/google/protobuf/io/zero_copy_stream_impl.cc \ src/google/protobuf/compiler/importer.cc \ src/google/protobuf/compiler/parser.cc
Kütüphanenin lite versiyonunu oluşturmak için gereklidir. Maalesef lib'in tam sürümü sadece Android 2.3'ten çalışıyor. Android 1.6, 2.1, 2.3 için lite sürümünü test ettim. Ndk-build kullanarak kütüphaneyi
- oluşturun. Lite kütüphanesi için C++ dosyalarını (protoc derleyicisini kullanarak) oluşturmak için
- eklenmesi gerekir: option optimize_for = LITE_RUNTIME; .proto dosyasında.
Belirtilen satırları kaldırdığımda bir derleme hatası alıyorum. Bu hatların kaldırılması gerektiğinden emin misin? "- sysroot = $ SYSROOT" ' ' ./configure 'ihracat SYSROOT = $ NDK_ROOT/platformlar/android-9/ezeli arm' ' ihracat: CPPFLAGS = –
Sen CPPFLAGS de sistemkökü kurmayı unuttuğu gibi görünüyor options' –
- 1. Hata golang google protokol arabelleği
- 2. Protokol Arabelleği: ByteString'ten byte dizisini kopyalama yapmadan
- 3. node.js ile Protokol arabelleği - .proto oluşturulmadı .proto
- 4. Android NDK kullanıldığında bağımsız PCLK için bağımsız bağlantı oluşturma
- 5. Android NDK
- 6. Android: ndk
- 7. Android NDK
- 8. Android NDK
- 9. Android NDK geliştirmesi
- 10. Android ndk statik zlib
- 11. Android NDK artımlı yapı
- 12. Android Studio 2.0, grad-deneysel eklenti ile ndk oluşturma
- 13. Android NDK Dosya ve Maven Oluşturma Sorunları Yapın
- 14. Android NDK assert.h sorunları
- 15. kullanarak Soket() Android NDK
- 16. NDK araç zinciri ile SDL2 oluşturma
- 17. Android ndk r9b'yi Android için FFMPEG'i derlemek için nasıl kullanılır
- 18. Android için GoogleTest NDK C++ ile CMake
- 19. protokol uzantısı, protokol
- 20. AVAudioPlayer initWithData için bellekte bir LPCM arabelleği oluşturma
- 21. AndroidStudio için NDK
- 22. Android cmake, daha yeni NDK sürümleriyle uyumludur?
- 23. Android NDK build, Yöntem çözülemedi
- 24. Android Ön Yükleme NDK Uygulaması
- 25. NDK Entegrasyon Android Studio Hata
- 26. Kaldırma ve kaldırma Android NDK
- 27. Android-NDK-Yerleşik Destek-NDK konumu tercihlerinde geçerli değil
- 28. Android NDK, Hata: (165, 0) Neden: ndk-build ikili bulunamıyor
- 29. Windows için Android NDK için harici OpenSSL kütüphanesi yapılamıyor/Cygwin
- 30. Android kurulum için ndk düzeltme numarasını bulmak için nasıl
Sadece bir öneri. İlk önce onu Java'da oluşturun ve daha sonra optimizasyona ihtiyacınız varsa NDK'ya geçin. En azından Java'da temel protokolü indirirsiniz. – arunkumar
Google tarafından sağlanan C++ uygulamasını kullanmayı denediniz mi? –
İşte benim cevabım: https://stackoverflow.com/a/44773137/529442 –