麦子学院Android开发教程调用JNI方法及代码.docx_第1页
麦子学院Android开发教程调用JNI方法及代码.docx_第2页
麦子学院Android开发教程调用JNI方法及代码.docx_第3页
麦子学院Android开发教程调用JNI方法及代码.docx_第4页
麦子学院Android开发教程调用JNI方法及代码.docx_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

IT在线教育领跑者麦子学院Android调用JNI方法 及 代码JNI: Java Native Interface, 实现Java和C/C+的互通. 在Android上使用JNI的方法. 时间:2014.9.3 环境: 必须使用标准Eclipse, 安装Android的环境, 才可以使用NDT插件.Eclipse Standard/SDK Version: Luna Release (4.4.0);Android: ADT-23.0.3.zip; NDT: GNU Make 3.81; 基础安装略过. 方法1. 创建接口类:首先新建JNI的接口类, 包含使用的静态方法. 位置: 项目-src-package-JniClient.java /* * */package com.example.hellomyjni;/* * author Administrator * */public class JniClient static public native String sayName();2. 编译接口类:进入项目文件夹, 生成JNI的头文件, 使用命令:javah -classpath bin/classes -d jni com.example.hellomyjni.JniClient命令解析: javah 生成头文件;-classpath 使用类的位置(bin/classes), 都是.class文件;-d jni 需要生成JNI的类(com.example.hellomyjni.JniClient), 包package.classname.按F5刷新项目, 项目会自动生成jni文件夹, 并包含一个头文件com_example_hellomyjni_JniClient.h./* DO NOT EDIT THIS FILE - it is machine generated */#include /* Header for class com_example_hellomyjni_JniClient */#ifndef _Included_com_example_hellomyjni_JniClient#define _Included_com_example_hellomyjni_JniClient#ifdef _cplusplusextern C #endif/* * Class: com_example_hellomyjni_JniClient * Method: sayName * Signature: ()Ljava/lang/String; */JNIEXPORT jstring JNICALL Java_com_example_hellomyjni_JniClient_sayName (JNIEnv *, jclass);#ifdef _cplusplus#endif#endif3. 配置Android项目的NativeSupport. 右键点击项目在Android Tools里面点击Add NativeSupport, 就会自动生成: HelloMyJni.cpp和Android.mk.Android.mk不需要修改:LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := HelloMyJniLOCAL_SRC_FILES := HelloMyJni.cppinclude $(BUILD_SHARED_LIBRARY)HelloMyJni.cpp需要修改. 4. 添加需要的函数即修改HelloMyJni.cpp. 首先, 添加头文件, 即JNI生成的头文件, #include com_example_hellomyjni_JniClient.h; 此时头文件的报错消失.其次, 复制JNIEXPORT函数, 并填写参数名称.在函数写程序, 并调用其他C+程序. 注意的是此时的编译环境自动为C+. #include #include com_example_hellomyjni_JniClient.h JNIEXPORT jstring JNICALL Java_com_example_hellomyjni_JniClient_sayName (JNIEnv *env, jclass) return env-NewStringUTF(Im Spike!); 5. 修改主程序.默认为输出为HelloWorld.在res-layout-activity_main.xml中, 为TextView添加id, 则可以调用, 如android:id=+id/text_view. 其他不做修改. 在主程序中, src-package-MainActivity.java, 首先修改输出字符, 即重新指定字符: Override protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView tv = (TextView) findViewById(R.id.text_view); tv.setText(JniClient.sayName(); 其次, 添加库的引用, 引用名字就是Add NativeSupport时填写的类名, 默认与项目名称相同. static System.loadLibrary(HelloMyJni); 其余不需要修改.全部:package com.example.hellomyjni;import android.app.Activity;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.widget.TextView;public class MainActivity extends Activity protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView tv = (TextView) findViewById(R.id.text_view); tv.setText(JniClient.sayName(); public boolean onCreateOptionsMenu(Menu menu) / Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; public boolean onOptionsItemSelected(MenuItem item) / Handle action bar item clicks here. The action bar will / automatically handle clicks on the Home/Up button, so long / as you specify a parent activity in AndroidMani

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论