0

我已經嘗試構建用於android.in的cryptopp庫我已經使用了本教程的這一部分。 https://www.cryptopp.com/wiki/Android_(Command_Line)將Cryptp添加到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 

######################################################### 

我基於此的加密++ wiki頁面Android Activity其中引用AndroidPRNG,使用加密+作爲在Android共享對象這表明上。

我被卡住了,因爲我無法讓它工作。我對android很陌生,所以我不知道該怎麼做。我能夠讓它運行的ios版本。我遵循XCode教程。只是這讓我瘋狂。我會很感激所有我能得到的幫助。我如何構建有什麼問題?建設完成後,我將其複製到我的項目中,還是隻連接已安裝的版本?我如何正確地添加/鏈接到我的項目?對不起,問這麼多問題。 PS:我爲我的項目使用cocos2dx。也許值得一提。

+0

*「我的問題是,我無法將其添加到我的項目中」*和*「我卡住了,因爲我無法使它工作。」*是什麼意思?對我們來說,幫助你沒有任何用處。 – jww

+0

另外,如果Cocos2d-x使用的是GNU運行時,那麼您將需要切換到GNU,並停止使用STLport。混合和匹配這些運行時會導致模糊的內存錯誤。 – jww

+0

@jww我已經問過我的問題。我如何正確構建它?我會對構建的庫做些什麼,將它複製到項目中,還是在安裝後將其鏈接起來?我如何正確地鏈接到我的項目在android.mk? – cessmestreet

回答

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靜電 - >這是因爲cocos2dx用的是GNU靜電。


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下載它。

我正在下載它。當我能夠將make和sudo命令安裝到我的Windows時,我會回答這個問題。

在平均時間,這裏是我做了什麼,使使用cryptopp我的項目編譯在Windows假定您已經成功地在Mac編譯它:
1)的cryptopp的Android特定庫和頭文件從/usr/local/cryptopp複製到你的jni文件夾。它應該看起來像這樣: folder hierarchy for cryptopp

注意:在/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_FILESCRYPTOPP_LIB使用$(LOCAL_PATH)。這是爲了避免丟失目錄: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

hi sir @jww它在我使用gnu-static的時候工作。能夠編譯它。 – cessmestreet

相關問題