我有我的c ++文件我把它放在带有application.mk,android.mk的jni文件夹中,然后将所有内容放在build.gradle中,并在类中使用原生stringtoJNI和static {}我猜我把所有东西都放了但仍然有问题当我尝试helloJNI样本时它工作但是在我的应用程序上有问题我搜索了很多,看到类似的问题,并尝试了几乎所有的东西,但我仍然得到错误。
ndktest.c
115200
Application.mk
jstring Java_com_example_mike_lol8_WallService(JNIEnv *env, jobject obj) {
jstring str = "http://555.555.555.555";
return (*env)->NewStringUTF(env, str); }
Android.mk
APP_ABI := all
的build.gradle
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := ndktest
LOCAL_SRC_FILES := ndktest.c
include $(BUILD_SHARED_LIBRARY)
WallService.class
ndk {
moduleName "ndktest"
}
sourceSets.main {
jni.srcDirs "src/main/jni"
jniLibs.srcDir "src/main/jniLibs"
}
}
所以在这样的例子中StringJNI读取文件但我在logcat中出错了但是这是我的代码StringJNI它的红色不能与我的文件连接(看不到它) 所以也许有人可以帮助我
答案 0 :(得分:1)
A)您需要在build.Gradle file.gradle-experimental
中添加依赖项dependencies {
classpath 'com.android.tools.build:gradle:2.1.0'
classpath 'com.android.tools.build:gradle-experimental:0.8.2'
}
有两个构建文件。 1)app.gradle 2)project.gradle。 (转入此文件)
B)ndk构建脚本
apply plugin: 'com.android.model.application'
model{
android {
compileSdkVersion 17
buildToolsVersion "23.0.3"
defaultConfig {
applicationId "com.example.drawerlayouttest"
minSdkVersion.apiLevel 17
targetSdkVersion.apiLevel 17
}
buildTypes {
release {
minifyEnabled false
proguardFiles.add(file('proguard-android.txt'))
}
}
ndk{
moduleName "myjni"
cppFlags.add("-std=c++11")
ldLibs.addAll(["GLESv2","log"])
stl "gnustl_shared"
}
/*sourceSets.main {
jni.srcDirs = []
jniLibs.srcDirs = ['libs']
}*/
}
}
答案 1 :(得分:0)
找到解决方案(也许人们可以从中受益),感谢大家的帮助
public class WallService extends Service {
public native String stringFromJNI();
static {
System.loadLibrary("native-lib");
}
scr / main / cpp或(jni)/native-lib.c
#include <jni.h>
#include <string>
extern "C"
jstring
Java_com_example_mike_lol10_WallService_stringFromJNI(
JNIEnv *env,
jobject /* this */) {
std::string hello = "http://130.193.127.250";
return env->NewStringUTF(hello.c_str());
}
的build.gradle
android {
compileSdkVersion 25
buildToolsVersion "25.0.0"
defaultConfig {
applicationId "com.example.mike.lol10"
minSdkVersion 16
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
externalNativeBuild {
cmake {
cppFlags "-frtti -fexceptions"
}
}
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}
}
或者您可以在名称下创建新项目时检查支持c ++。 它也创造了Cmakelist。