[关闭]
@ZeroGeek 2015-09-16T07:53:52.000000Z 字数 1965 阅读 630

NDK基本开发及适用场景

每周主题 android


IDE:Android Studio 1.3
操作系统:Ubuntu 14.04 LTS

基本使用

  1. public class HelloClass {
  2. static {
  3. System.loadLibrary("app"); // module的名字
  4. }
  5. public native String stringFromJNI(); // 声明本地方法
  6. }
  1. #include <string.h>
  2. #include <jni.h>
  3. jstring Java_com_zero_ndk_JNIClass_HelloClass_stringFromJNI( JNIEnv* env, jobject thiz )
  4. {
  5. #if defined(__arm__)
  6. #if defined(__ARM_ARCH_7A__)
  7. #if defined(__ARM_NEON__)
  8. #if defined(__ARM_PCS_VFP)
  9. #define ABI "armeabi-v7a/NEON (hard-float)"
  10. #else
  11. #define ABI "armeabi-v7a/NEON"
  12. #endif
  13. #else
  14. #if defined(__ARM_PCS_VFP)
  15. #define ABI "armeabi-v7a (hard-float)"
  16. #else
  17. #define ABI "armeabi-v7a"
  18. #endif
  19. #endif
  20. #else
  21. #define ABI "armeabi"
  22. #endif
  23. #elif defined(__i386__)
  24. #define ABI "x86"
  25. #elif defined(__x86_64__)
  26. #define ABI "x86_64"
  27. #elif defined(__mips64) /* mips64el-* toolchain defines __mips__ too */
  28. #define ABI "mips64"
  29. #elif defined(__mips__)
  30. #define ABI "mips"
  31. #elif defined(__aarch64__)
  32. #define ABI "arm64-v8a"
  33. #else
  34. #define ABI "unknown"
  35. #endif
  36. return (*env)->NewStringUTF(env, "Hello from JNI ! Compiled with ABI " ABI ".");
  37. }
  1. mJNITv = (TextView) findViewById(R.id.ndk_tv);
  2. HelloClass jniFunc = new HelloClass();
  3. mJNITv.setText(jniFunc.stringFromJNI());

说明

  1. defaultConfig {
  2. applicationId "com.zero.ndk"
  3. minSdkVersion 14
  4. targetSdkVersion 22
  5. versionCode 1
  6. versionName "1.0"
  7. ndk { // 注意添加这个配置,不然方法会显示红色,但运行不会报错
  8. }
  9. }

关于如何编写C函数就要靠自己去学习咯

为了使用JNI,专门定义了一套接口例如jstring替代String

使用目的

使用场景

推荐教程:

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注