设为首页 加入收藏

TOP

Android之搭建JNI开发环境及简单案例
2014-11-24 12:07:18 来源: 作者: 【 】 浏览:0
Tags:Android 搭建 JNI 开发 环境 简单 案例

项目名:HelloFromC


一、在开始jni编程之前对我们使用的环境进行如下配置:(在windows环境下)


2、下载cygwin。


安装的时候,最高版本进行安装。


3、配置NDK的 cygwin环境变量



为了方便直接在命令行里面使用ndk-build


需要给cygwin的环境变量里面添加ndk的目录


目录/etc/profile/


4、运行cygwin。(可输入如下命令:make -v ,gcc -v)


输入make -v



显示出来 GNU Make 的版本 ,说明我们的cygwin模拟的linux编译环境 模拟成功了.


二、为eclipse增加c和c++的开发插件 CDT插件


Help中的install new software



选择 Helios- http://download.eclipse.org/release/helios


等待展开,选择Programing language


选择c/c++ 开发工具


一路next下去。


同意licenses


安装成功会提示是不是确认重启eclipse,重启就完成安装。


三、JNI简单案例:


Java代码调用一个C方法打印HelloFromC


MainActivity:



package com.csdn.hello;


import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;


public class MainActivity extends Activity {

static{
System.loadLibrary("Hello");//加载
}

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}

public native String helloFromC();
public native String hello_from_c();


public void onClick(View view){
String result= helloFromC();
Toast.makeText(this,result , 0).show();
}


}




main.xml:


< xml version="1.0" encoding="utf-8" >
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >


android:onClick="onClick"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="HelloFromC" />




cmd 进入eclipse中安卓工程HelloFromC的目录:


D:\WorkSpace\HelloFromC\bin\classes


输入: javah com.csdn.hello,MainActivity


生成该文件对应的头文件:com_csdn_hello_MainActivity.h


在HelloFromC根目录下建立名为jni的文件夹;


将其复制到该目录下;


com_csdn_hello_MainActivity.h:



/* DO NOT EDIT THIS FILE - it is machine generated */
#include
/* Header for class com_itheima_hello2_MainActivity */


#ifndef _Included_com_itheima_hello2_MainActivity
#define _Included_com_itheima_hello2_MainActivity
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_itheima_hello2_MainActivity
* Method: helloFromC
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_csdn_hello_MainActivity_helloFromC
(JNIEnv *, jobject);


#ifdef __cplusplus
}
#endif
#endif


jni目录下加入Android.mk文件:


#local_path 代表的是当前android.mk文件所在的路径
#$() 代表的是一个函数.
LOCAL_PATH := $(call my-dir)


#CLEAR_VARS 清空变量
# 清空所有以LOCAL_ 开头的变量里面的内容 (不会清空LOCAL_PATH里面的数据);
include $(CLEAR_VARS)


# 定义编译后的 c代码库 的名称.
LOCAL_MODULE := Hello
#定义makefile 编译的源文件
#依赖的头文件 是不需要指定的.
LOCAL_SRC_FILES := Hello.c


#生成一个动态的代码库
include $(BUILD_SHARED_LIBRARY)
# include $(BUILD_STATIC_LIBRARY); 生成一个静态的代码库
# 静态代码库的作用 主要就是用来提供一些库函数 编译的时候 可能需要用到静态代码库.


并编写Hello.c文件:


#include "com_csdn_hello_MainActivity.h"


JNIEXPORT jstring JNICALL Java_com_csdn_hello_MainActivity_helloFromC
(JNIEnv * env, jobject obj){
return (*env)->NewStringUTF(env,"Hello From C");
}



打开cygwin


输入 cd..


cd ..


切换到linux根目录下


然后进入到应用程序目录



cd cydrive/d/WorkSpace/HelloFromc



ndk-build 进行编译,生成动态库:


在D:\WorkSpace\HelloFromC2\obj\local\armeabi下会自动生成



libHello.so文件


最后在如上的MainActivity中的static代码块中加载动态库,即Android.mk中LOCAL_MODULE := Hello 变量的值


然后部署应用程序,点击按钮即可利用土司打印出结果 HelloFromC


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Python实现增强版Ping 下一篇Matlab数据处理快速学习教程

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·PostgreSQL 索引 - (2025-12-25 22:20:43)
·MySQL Node.js 连接 (2025-12-25 22:20:41)
·SQL 撤销索引、表以 (2025-12-25 22:20:38)
·Linux系统简介 (2025-12-25 21:55:25)
·Linux安装MySQL过程 (2025-12-25 21:55:22)