Я успешно скомпилировал и выполнил Cryptopp в IOS, но я действительно изо всех сил пытаюсь заставить его работать в Android.
Здесь я использую Cryptopp 5.6.3, NDK r10e и Android Studio 1.5, я могу успешно собрать libcryptopp.so через ndk-build, но он проходит через ряд ошибок, таких как неопределенная ссылка на «vtable для CryptoPP:: AutoSeededX917RNG», когда я делаю перестроение через андроид студия.
В Android.mk
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := crypt_user
LOCAL_SRC_FILES := crypt_user.cpp
LOCAL_SHARED_LIBRARIES := cryptopp
include $(BUILD_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := cryptopp
LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libcryptopp.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_SHARED_LIBRARY)
в Application.mk
APP_ABI := armeabi
APP_CPPFLAGS += -fexceptions -frtti
APP_STL := stlport_shared
#APP_STL := gnustl_shared
в build.gradle
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "23.0.0"
defaultConfig {
applicationId "com.kasbah.jeeva.ndklearning"
minSdkVersion 16
targetSdkVersion 23
versionCode 1
versionName "1.0"
ndk {
moduleName = "crypt_user"
cFlags("-fexceptions")
stl = "stlport_shared"
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
debuggable true
jniDebuggable true
}
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.android.support:design:23.1.1'
}
В crypt_user.cpp
#include <jni.h>
#include "../cryptopp/include/cryptlib.h"
#include "../cryptopp/include/osrng.h"
//using CryptoPP::AutoSeededRandomPool;
using CryptoPP::AutoSeededX917RNG;
#include "../cryptopp/include/aes.h"
using CryptoPP::AES;
#ifdef __cplusplus
extern "C" {
#endif
jlong Java_com_kasbah_jeeva_ndklearning_MainActivity_fun
(JNIEnv* env, jobject o, jint i) {
AutoSeededX917RNG<AES> rng;
long long t = CryptoPP::INFINITE_TIME / i;
return t;
}
#ifdef __cplusplus
}
#endif
Я могу успешно скомпилировать его, когда я не использовал код, связанный с криптографией.
Пожалуйста, помогите мне решить эту проблему, потому что я борюсь с этим более 2 недель.