开发步骤

1.创建 HelloJNI 类

packagecom.zaoqibu.hellojni;publicclassHelloJNI{publicnativeStringstringFromJNI();static{System.loadLibrary("hello-jni");}}
  • 原生方法的声明 public native String stringFromJNI();

  • 静态加载共享库,System.loadLibrary("hello-jni");。库的名字在 jni/Android.mk 文件中定义的 LOCAL_MODULE 变量。

2.使用javah 生成 JNI 头文件

通过 Java 类生成头文件。

D:\Samples\Android\NDK\HelloJNI\app\src\main\java>javahcom.zaoqibu.hellojni.HelloJNI

通过 class 生成头文件。(使用前得编译出 class 才能用)

D:\Samples\Android\NDK\HelloJNI\app>javah-classpathbuild/intermediates/classes/debugcom.zaoqibu.hellojni.HelloJNI

3.增加 jni 目录及文件

srcjni\Android.mkApplication.mkcom_zaoqibu_hellojni_HelloJNI.hcom_zaoqibu_hellojni_HelloJNI.c

4.原生方法的实现 com_zaoqibu_hellojni_HelloJNI.c

#include<com_zaoqibu_hellojni_HelloJNI.h>#include<string.h>JNIEXPORTjstringJNICALLJava_com_zaoqibu_hellojni_HelloJNI_stringFromJNI(JNIEnv*env,jobjectthiz){return(*env)->NewStringUTF(env,"HellofromJNI!");}

5.构建共享库的描述 Android.mk

LOCAL_PATH:=$(callmy-dir)include$(CLEAR_VARS)LOCAL_MODULE:=hello-jniLOCAL_SRC_FILES:=com_zaoqibu_hellojni_HelloJNI.cinclude$(BUILD_SHARED_LIBRARY)

6.生成所有支持的CPU体系结构的共享库 Application.mk

APP_ABI:=all

7.编译共享库 ndk_build

D:\Samples\Android\NDK\HelloJNI\app\jni>ndk_build
  • 生成共享库到 libs 目录。

8.修改 app 构建文件 build.gradle,打包 APK 时,增加共享库。在 android 中增加

sourceSets{main{jniLibs.srcDirs=['libs']}}

修改后

applyplugin:'com.android.application'android{compileSdkVersion21buildToolsVersion"21.1.1"defaultConfig{applicationId"com.zaoqibu.hellojni"minSdkVersion14targetSdkVersion21versionCode1versionName"1.0"}buildTypes{release{minifyEnabledfalseproguardFilesgetDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'}}sourceSets{main{jniLibs.srcDirs=['libs']}}}dependencies{compilefileTree(dir:'libs',include:['*.jar'])compile'com.android.support:appcompat-v7:21.0.3'}

9.调用原生方法。HelloJNIActivity.java

publicclassHelloJNIActivityextendsActionBarActivity{@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_hellojni);HelloJNIhelloJNI=newHelloJNI();Stringhello=helloJNI.stringFromJNI();TextViewtextView=(TextView)findViewById(R.id.textView);textView.setText(hello);}}

10.运行

参考

JNI Tips

Android Studio: Android Manifest doesn't exists or has incorrect root tag


更多相关文章

  1. android asset中 zip包解压sdcard
  2. android中webviewjs与java的相互调用
  3. Android隐藏标题栏的四种方法
  4. Android(安卓)menu使用
  5. Android(安卓)强制设置横屏或竖屏 设置全屏
  6. MTK android 常用修改点
  7. Android分享笔记(5) Android(安卓)与 JS 交互
  8. 新浪微博Oauth2.0授权认证及SDK、API的使用(Android)
  9. android多语言切换失效

随机推荐

  1. Android——动画专题研究
  2. android6.0下载路径设置
  3. Android 关于WebView加载完成的多种监听
  4. android push机制-C2DM
  5. 特效--------圆角 倒影
  6. android 播放器解析MP3文件乱码分析
  7. android声音检测仪---分贝仪 (附源码)
  8. Android MediaPlayer 分析- MediaPlayerS
  9. Android制作 9-Patch图片(可调整大小的位
  10. Android NDK: WARNING: APP_PLATFORM And