为什么不在我的应用程序上阅读android studio上的c ++文件..?

时间:2016-11-04 05:32:00

标签: java android android-studio android-ndk

我有我的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它的红色不能与我的文件连接(看不到它) 所以也许有人可以帮助我

2 个答案:

答案 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。