Итак, я хочу создать приложение android и включить предварительно скомпилированный cpp lib.
мой cpp файл: test1. cpp
#include <iostream>
using namespace std;
int add_numbers(int a,int b){
return a+b;}
заголовочный файл : test1.hpp
extern int add_numbers(int a,int b);
я построил их с помощью команды:
g++ -c test1.cpp -o test1.so
теперь в android studio я создаю новое приложение на C ++ и в CMakeLists.txt я добавил эти строки
add_library(test1 SHARED IMPORTED)
set_target_properties(test1 PROPERTIES IMPORTED_LOCATION
${CMAKE_SOURCE_DIR}/../../..//libs/test1.so)
target_link_libraries( # Specifies the target library.
native-lib
# Links the target library to the log library
# included in the NDK.
test1 ${log-lib})
и отредактировал мой native-lib. cpp в:
#include <jni.h>
#include <string>
#include "test1.hpp"
extern "C" JNIEXPORT jstring JNICALL
Java_com_example_cryptotrading_MainActivity_stringFromJNI(
JNIEnv* env,
jobject /* this */) {
std::string hello = "Hello from C++";
int x = 0;
x = add_numbers(2,3);//------------------------calling here**************
return env->NewStringUTF(hello.c_str());
}
build.gradle:
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
android {
compileSdkVersion 29
buildToolsVersion "29.0.3"
defaultConfig {
applicationId "com.example.cryptotrading"
minSdkVersion 15
targetSdkVersion 29
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
externalNativeBuild {
cmake {
cppFlags ""
}
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
externalNativeBuild {
cmake {
path "src/main/cpp/CMakeLists.txt"
version "3.10.2"
}
sourceSets {
main {
jniLibs.srcDirs 'libs/', 'app/libs/', '${CMAKE_SOURCE_DIR}/../../..//libs/'
}
}
}
sourceSets {
main {
jniLibs.srcDirs 'libs/', 'app/libs/', '${CMAKE_SOURCE_DIR}/../../..//libs/'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'androidx.core:core-ktx:1.0.2'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
}
при сборке этого приложения, оно дает мне ошибка:
error: undefined reference to 'add_numbers(int, int)'
я дал ndk r21 местоположение в свойствах проекта.
Примечание: это мое первое приложение, ребята.