0

Я попытался построить библиотеку cryptopp для android.I использовал эту часть учебника. https://www.cryptopp.com/wiki/Android_(Command_Line)Добавление Cryptopp в Android.mk

$ 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.

Я застреваю, потому что я не могу заставить его работать. Я очень новичок в андроиде, поэтому не знаю, что с этим делать. Мне удалось запустить версию ios. Я последовал за учебником XCode. Это только то, что делает меня сумасшедшим. Буду признателен за всю помощь, которую я могу получить. Что-то не так с тем, как я строю? После того, как я построил, скопирую ли я его в свой проект или просто связал установленный вариант в порядке? Как правильно добавить/связать его с моим проектом? Извините за задание стольких вопросов.

PS: Я использую cocos2dx для своего проекта. Может быть, стоит упомянуть.

+0

Что делает * «Моя проблема заключается в том, что я не могу добавить ее в свой проект» * и * «Я застрял, потому что я не могу заставить ее работать». * Означает? Нам действительно ничего не полезно, чтобы помочь вам. – jww

+0

Кроме того, если Cocos2d-x использует среду исполнения GNU, вам понадобится перейти на GNU и прекратить использование STLport. Смешивание и совпадение с этими режимами времени приводит к непонятным ошибкам памяти. – jww

+0

@jww Я уже задал свой вопрос. Как правильно его построить? Что я буду делать со встроенной библиотекой, скопировать ее в проект или просто связать с ней после ее установки? Как правильно связать его с моим проектом в android.mk? – cessmestreet

ответ

2

После прочтения и пробуя всевозможные комбинации для моего Android.mk, я смог скомпилировать криптопп с 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 

Обратите внимание, что я использовал гну-статический -> это потому, что cocos2dx использует гну-статичные.


ВТОРАЯ - Обновление 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 компиляции в Windows, при условии, что вы успешно скомпилирован в макинтош:
1.) Скопировать cryptopp андроид специальные библиотеки и файлы заголовков от /usr/local/cryptopp к вашей папке jni. Он должен выглядеть примерно так: folder hierarchy for cryptopp

Примечание: В /usr/local/cryptopp включенные файлы находятся в конкретной папке для Android.В приведенном выше примере я поместил файл include за пределами, так как все они используют одни и те же файлы заголовков. Таким образом, мы избежим дублированных файлов заголовков.

2.) После копирования обновите свой Android.mk. Вместо этого укажите на ваш новый каталог cryptopp. Если вы следовали иерархии в step1, код 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/.

+0

'gnu-static' кажется неправильным выбором, потому что оба Crypto ++ и Cocos2dx используют его. Я считаю, что в примечаниях к выпуску Android NDK вы должны использовать' gnu-shared' в этом случае и заявить, что вы не можете использовать статическую библиотеку. Если вы столкнулись с неясными ошибками памяти, тогда обязательно переключитесь на 'gnu-shared'. – jww

+0

привет sir @jww он работал, когда я использовал gnu-static. способный скомпилировать его. – cessmestreet