将 Cryptopp 添加到 Android.mk
Adding Cryptopp to Android.mk
我已经尝试为 android.I 构建 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++ 维基页面 Android Activity which referenced AndroidPRNG,它演示了如何使用 Crypto++ 作为 Android 上的共享对象。
我卡住了,因为我无法让它工作。我是 android 的新手,所以我不知道该怎么做。我能够制作它的 ios 版本 运行。我遵循了 XCode 教程。就是这个让我发疯。我将不胜感激我能得到的所有帮助。我的构建方式有问题吗?构建后,我是将它复制到我的项目中还是只链接已安装的版本就可以了?我如何正确地 add/link 它到我的项目?抱歉问了这么多问题。
PS: 我正在为我的项目使用 cocos2dx。也许值得一提。
在为我的 Android.mk 阅读并尝试各种组合后,我能够使用 cocos2dx 编译 cryptopp。
无论如何,这是我修复编译器错误的方法:
首先 - 构建库
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 时,我将更新这个答案。
与此同时,假设您已在 mac 中成功编译它,这是我在 Windows 中使用 cryptopp 编译我的项目所做的:
1.) 将 cryptopp android 特定库和头文件从 /usr/local/cryptopp
复制到您的 jni 文件夹。它应该看起来像这样:
注意:在 /usr/local/cryptopp
中,包含文件位于特定的 android 文件夹中。在上面的示例中,我将包含文件放在外面,因为它们都使用相同的头文件。这样,我们将避免重复的头文件。
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_SRC_FILES
使用的 CRYPTOPP_LIB
使用 $(LOCAL_PATH)
。这是为了避免缺少目录:jni/jni/Cryptopp/android-$(TARGET_ARCH_ABI)/lib/libcryptopp.a
。请记住 LOCAL_SRC_FILES
在 jni/
中开始搜索。
我已经尝试为 android.I 构建 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++ 维基页面 Android Activity which referenced AndroidPRNG,它演示了如何使用 Crypto++ 作为 Android 上的共享对象。
我卡住了,因为我无法让它工作。我是 android 的新手,所以我不知道该怎么做。我能够制作它的 ios 版本 运行。我遵循了 XCode 教程。就是这个让我发疯。我将不胜感激我能得到的所有帮助。我的构建方式有问题吗?构建后,我是将它复制到我的项目中还是只链接已安装的版本就可以了?我如何正确地 add/link 它到我的项目?抱歉问了这么多问题。
PS: 我正在为我的项目使用 cocos2dx。也许值得一提。
在为我的 Android.mk 阅读并尝试各种组合后,我能够使用 cocos2dx 编译 cryptopp。
无论如何,这是我修复编译器错误的方法:
首先 - 构建库
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 时,我将更新这个答案。
与此同时,假设您已在 mac 中成功编译它,这是我在 Windows 中使用 cryptopp 编译我的项目所做的:
1.) 将 cryptopp android 特定库和头文件从 /usr/local/cryptopp
复制到您的 jni 文件夹。它应该看起来像这样:
注意:在 /usr/local/cryptopp
中,包含文件位于特定的 android 文件夹中。在上面的示例中,我将包含文件放在外面,因为它们都使用相同的头文件。这样,我们将避免重复的头文件。
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_SRC_FILES
使用的 CRYPTOPP_LIB
使用 $(LOCAL_PATH)
。这是为了避免缺少目录:jni/jni/Cryptopp/android-$(TARGET_ARCH_ABI)/lib/libcryptopp.a
。请记住 LOCAL_SRC_FILES
在 jni/
中开始搜索。