gpt4 book ai didi

android - 如何以纯 Android Studio 方式编译我的 C++ 库(无需自行指定任何 .mk 文件)

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:17:11 25 4
gpt4 key购买 nike

一开始,我不得不说我已经搜索了尽可能多的可能答案。其中一些确实很有帮助,但不是以 Android Studio 的方式。另外,我可以让我的 JNI 与众所周知的示例“getStringFromNative()”一起工作,所以请不要给我这种链接。到目前为止我尝试了什么:

<强>1。我的目录结构

app 
|- src
|- main
|- java
|- jni
|- libs
|- libcrypto.a
|- libssl.a
|- openssl
|- xxxxx.h
|...... -> those .h file of openssl
|- com_ais_ndksample_MainActivity.h
|- CipherModule.cpp
|- CipherModule.h

<强>2。构建.gradle

apply plugin: 'com.android.application'

android {
compileSdkVersion 22
buildToolsVersion "23.0.0 rc3"

defaultConfig {
applicationId "com.ais.ndksample"
minSdkVersion 16
targetSdkVersion 22
versionCode 1
versionName "1.0"

ndk {

moduleName "JniDemo"

}
}

buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard- android.txt'), 'proguard-rules.pro'
}
}
sourceSets {
main {

jni.srcDirs = ['src/main/jni']

jniLibs.srcDirs = ['src/main/jni/libs']

}
}
}

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:22.2.1'

}
  1. 错误发生在我的 CipherModule.cpp 中,我在顶部有几条声明如下:

    #include "CipherModule.h"
    #include <openssl/aes.h>
    #include <stdio.h>
    #include <iostream>

并且#include 显示警告未使用的导入语句,但我确实使用了它。当我构建时,我收到如下所示的错误消息:

undefined reference to `AES_set_encrypt_key`
undefined reference to `AES_cbc_encrypt`

因此,我怀疑我没有把我的openssl库做对,但我确实在我的build.gradle中指定了它。我为此付出了很多努力,但没有运气。任何线索或想法将不胜感激!!!!

最佳答案

我终于找到了这个问题的根本原因。我得到的错误信息如下:

undefined reference to `AES_set_encrypt_key`
undefined reference to `AES_cbc_encrypt`

是因为我的 libcrypto.a 和 libssl.a 库不是为基于 android-armv7 的设备构建的。我通过“交叉编译”我的 openssl for armv7 解决了这个问题。脚本如下所示:

export CC=/your_path_to_sdk/ndk-bundle/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-gcc

export AR=/your_path_to_sdk/ndk-bundle/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-ar

export RANLIB=/your_path_to_sdk/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-gcc-ranlib

./Configure android-armv7

export ANDROID_DEV=/your_path_to_sdk/ndk-bundle/platforms/android-15/arch-arm/usr

make

您可以在从 official website 下载的 openssl 文件夹中运行此脚本您将在 openssl 文件夹中获得 libcrypto.a 和 libssl.a。这次是为android编译的。如果你们仍然遇到类似的问题,请随时问我!

关于android - 如何以纯 Android Studio 方式编译我的 C++ 库(无需自行指定任何 .mk 文件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31893772/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com