Добавление Cryptopp в Android.mk
Я попытался создать библиотеку cryptopp для Android. Я использовал эту часть руководства. https://www.cryptopp.com/wiki/Android_(Command_Line)
$ cat build-all-android.sh
#!/bin/bash
for arch in armeabi armeabi-v7a armeabi-v7a-hard arm64-v8a mips mips64 x86 x86_64
do
. ./setenv-android.sh $arch stlport
if [ "$?" -eq "0" ]; then
make -f GNUmakefile-cross distclean
make -f GNUmakefile-cross static dynamic
sudo make -f GNUmakefile-cross install PREFIX=/usr/local/cryptopp/android-$arch
fi
done
Я был в состоянии сделать библиотеки. Моя проблема в том, что я не могу добавить его в свой проект. Кажется, мне нужно отредактировать файл Android.mk, но я не могу сделать это правильно. Я добавил этот блок в свой Anroid.mk
#########################################################
# STLport library
include $(CLEAR_VARS)
STLPORT_INCL := /Applications/Cocos/Android/android-ndk-r10e/sources/cxx-stl/stlport
STLPORT_LIB := /Applications/Cocos/Android/android-ndk-r10e/sources/cxx-stl/stlport/libs/$(TARGET_ARCH_ABI)
LOCAL_MODULE := stlport_shared
LOCAL_SRC_FILES := $(STLPORT_LIB)/libstlport_shared.so
LOCAL_CPP_FEATURES += rtti exceptions
LOCAL_EXPORT_CPPFLAGS :=
LOCAL_EXPORT_C_INCLUDES := $(STLPORT_INCL)
include $(PREBUILT_SHARED_LIBRARY)
LOCAL_SHARED_LIBRARIES := stlport_shared
#########################################################
# Crypto++ library
include $(CLEAR_VARS)
CRYPTOPP_INCL := /usr/local/cryptopp/android-$(TARGET_ARCH_ABI)/include
CRYPTOPP_LIB := /usr/local/cryptopp/android-$(TARGET_ARCH_ABI)/lib
LOCAL_MODULE := cryptopp
LOCAL_SRC_FILES := $(CRYPTOPP_LIB)/libcryptopp.so
LOCAL_CPP_FEATURES := rtti exceptions
LOCAL_EXPORT_C_INCLUDES := $(CRYPTOPP_INCL) $(CRYPTOPP_INCL)/cryptopp
include $(PREBUILT_SHARED_LIBRARY)
LOCAL_SHARED_LIBRARIES := cryptopp
#########################################################
Я основал это на вики-странице Crypto++ Android Activity, которая ссылалась на AndroidPRNG, которая демонстрирует использование Crypto++ в качестве общего объекта на Android.
Я застрял, потому что я не могу заставить его работать. Я очень плохо знаком с Android, поэтому я точно не знаю, что с этим делать. Я смог заставить его работать на ios-версии. Я следовал учебнику по XCode. Именно это сводит меня с ума. Я был бы признателен за любую помощь, которую я могу получить. Что-то не так с тем, как я строю? После сборки я могу скопировать его в свой проект или просто установить ссылку на установленную версию? Как правильно добавить / связать его с моим проектом? Извините, что задали так много вопросов.
PS: я использую cocos2dx для своего проекта. Может быть, стоит упомянуть.
1 ответ
Прочитав и попробовав всевозможные комбинации для моего Android.mk, я смог скомпилировать cryptopp с помощью cocos2dx.
Во всяком случае, вот как я исправил ошибку компилятора:
ПЕРВЫЙ - Сборка библиотек
cat build-all-android.sh
#!/bin/bash
for arch in armeabi armeabi-v7a armeabi-v7a-hard arm64-v8a mips mips64 x86 x86_64
do
AOSP_PI="android-16" . ./setenv-android.sh $arch gnu-static
if [ "$?" -eq "0" ]; then
make -f GNUmakefile-cross distclean
make -f GNUmakefile-cross static dynamic
sudo make -f GNUmakefile-cross install PREFIX=/usr/local/cryptopp/android-$arch
fi
done
Обратите внимание, что я использовал gnu-static -> это потому, что cocos2dx использует gnu-static.
ВТОРОЙ - Обновление Android.mk
# Crypto++ library
include $(CLEAR_VARS)
CRYPTOPP_INCL := /usr/local/cryptopp/android-$(TARGET_ARCH_ABI)/include
CRYPTOPP_LIB := /usr/local/cryptopp/android-$(TARGET_ARCH_ABI)/lib
LOCAL_MODULE := cryptopp
LOCAL_SRC_FILES := $(CRYPTOPP_LIB)/libcryptopp.a
LOCAL_CPP_FEATURES := rtti exceptions
LOCAL_EXPORT_C_INCLUDES := $(CRYPTOPP_INCL) $(CRYPTOPP_INCL)/cryptopp
include $(PREBUILT_STATIC_LIBRARY)
LOCAL_SHARED_LIBRARIES := cryptopp
---------------------------------------- ДЛЯ WINDOWS ----------------------------------------
Ответ выше работает только для Mac. В Windows я попытался установить библиотеки cryptopp, но мне это не удалось. AOSP_TOOLCHAIN_PATH был недействительным. Я попытался исправить это, обновив setenv-android.sh, добавив в него "windows-x86_64". Я смог исправить эту часть, но, к сожалению, у меня была ошибка "make: not a command". Мне сказали, что я должен был загрузить это для своего cygwin.
Я сейчас скачиваю это. Я буду обновлять этот ответ, когда смогу установить команды make и sudo на мою Windows.
В то же время, вот что я сделал, чтобы сделать мой проект с использованием cryptopp compile в Windows, предполагая, что вы успешно скомпилировали его в mac:
1.) Скопируйте библиотеки cryptopp android и заголовочные файлы из /usr/local/cryptopp
в вашу папку jni. Это должно выглядеть примерно так:
Примечание: в /usr/local/cryptopp
включаемые файлы находятся в определенной папке Android. В приведенном выше примере я разместил включаемый файл снаружи, поскольку все они используют одинаковые заголовочные файлы. Таким образом, мы избежим дублирования заголовочных файлов.
2.) После копирования обновите свой Android.mk. Вместо этого сделайте так, чтобы он указывал на ваш новый каталог cryptopp. Если вы следовали иерархии в шаге 1, ваш код Android.mk для cryptopp будет выглядеть примерно так:
# Crypto++ library
include $(CLEAR_VARS)
CRYPTOPP_INCL := $(LOCAL_PATH)/Cryptopp/include
CRYPTOPP_LIB := Cryptopp/android-$(TARGET_ARCH_ABI)/lib
LOCAL_MODULE := cryptopp
LOCAL_SRC_FILES := $(CRYPTOPP_LIB)/libcryptopp.a
LOCAL_CPP_FEATURES := rtti exceptions
LOCAL_EXPORT_C_INCLUDES := $(CRYPTOPP_INCL) $(CRYPTOPP_INCL)/cryptopp
include $(PREBUILT_STATIC_LIBRARY)
LOCAL_SHARED_LIBRARIES := cryptopp
Примечание: обратите внимание, что мы не использовали $(LOCAL_PATH)
для CRYPTOPP_LIB
который был использован LOCAL_SRC_FILES
, Это чтобы избежать отсутствия каталога: jni/jni/Cryptopp/android-$(TARGET_ARCH_ABI)/lib/libcryptopp.a
, Помни что LOCAL_SRC_FILES
начать поиск в jni/
,