我已经尝试为android构建cryptopp库。我已经使用了本教程的这一部分。 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 ++ wiki页面Android Activity,它引用了AndroidPRNG,它演示了使用Crypto ++作为Android上的共享对象。
我被卡住了,因为我无法让它发挥作用。我对android很新,所以我不知道该怎么做。我能够运行它的ios版本。我按照XCode教程。正是这让我疯狂。我很感激能得到的所有帮助。我的构建方式有问题吗?在构建之后,我是否将其复制到我的项目或只是链接已安装的版本是好的?如何正确添加/链接到我的项目?很抱歉问了这么多问题。
PS:我正在为我的项目使用cocos2dx。也许值得一提。
答案 0 :(得分:2)
在阅读并尝试了我的Android.mk的各种组合后,我能够用cocos2dx编译cryptopp。
无论如何,这是我如何修复编译器错误:
FIRST - 构建库
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。
SECOND - 更新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
--------------------------------------- - FOR WINDOWS ----------------------------------------
上面的答案仅适用于mac。在Windows中,我尝试安装cryptopp库但是我没有成功。 AOSP_TOOLCHAIN_PATH无效。我尝试通过更新setenv-android.sh来修复它,以包含" windows-x86_64"。我能够解决这个问题,但遗憾的是我有一个" make:not a command"错误。我被告知我必须为我的cygwin下载它。
我目前正在下载它。当我能够在我的Windows上安装make和sudo命令时,我会更新这个答案。
与此同时,这里是我在Windows中使用cryptopp编译我的项目所做的,假设您已经在mac中成功编译了它:
1.)将cryptopp android特定库和头文件从/usr/local/cryptopp
复制到您的jni文件夹。它应该看起来像这样:
注意:在/usr/local/cryptopp
中,包含文件位于特定的android文件夹中。在上面的示例中,我将include文件放在外面,因为它们都使用相同的头文件。这样,我们将避免重复的头文件。
2.)复制后,更新您的Android.mk。请指向您的新cryptopp目录。如果您按照步骤1中的层次结构进行操作,那么cryptopp的Android.mk代码将如下所示:
# 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/
中搜索。