linux+jni环境配置,深入剖析ndk配置环境VS简易配置jni流程

1、下载NDK,最新版本android-ndk-r9.Windows32-bit版本下载地址:http://dl.google.com/android/ndk/android-ndk-r9-windows-x86.zipWindows64-bit版本下载地址:h

1

Windows 32-bit 版本下载地址:

Windows 64-bit 版本下载地址:

2、解压压缩包.

android-ndk-r9\build:放的一些交叉编译工具

android-ndk-r9\platforms\android-9:编译对应不同的处理器工具

查看\android-ndk-r9\platforms\android-9\arch-arm\usr\include下:jni.h文件简单了解jni协议

例如:

1、typedef const struct JNINativeInterface* JNIEnv;

JNIEnv是常量体结构指针const struct JNINativeInterface*的别名

3、配置环境变量.

1、进入D:\android-ndk-r9-windows-x86\android-ndk-r9\目录:

进入命令:/d D:\android-ndk-r9-windows-x86\android-ndk-r9\

执行命令:ndk-build

7bc96d36211422a3d62ae2ed58dfb3fd.bmp

如果一劳永逸,就需要配置环境变量

D:\android-ndk-r9-windows-x86\android-ndk-r9

打开任意命令行输入命令:ndk-build

————————————先看稍微复杂的配置流程开发————————————

3、创建工程

4、在src的同级目录下创建jni文件夹

在jni下创建Android.mk(android.mk是Android操作系统编译的时候使用的编译规则文件)

查看

#调用系统工具链,当前的作用是调用当前目录文件

LOCAL_PATH := $(call my-dir)

#初始化工具链,并且清除环境变量,并没有把LOCAL_PATH清除

include $(CLEAR_VARS)

#LOCAL_MODULE对应的是库的名称,前面是省略lib;后面是省略.so,而且不能加上,加上会报错

LOCAL_MODULE := atguigu

#LOCAL_SRC_FILES引用源文件 ,如果有多个源文件怎么办,用空格链接

LOCAL_SRC_FILES := Hello.c

#配置动态链接库BUILD_SHARED_LIBRARY,生成.so文件,,文件小一些

#一般用动态链接库

#配置静态链接库BUILD_STATIC_LIBRARY,生成.a文件,文件大一些

include $(BUILD_SHARED_LIBRARY)

6、配置文件和入口代码

activity_main.xml(只有一个button)

xmlns:tools=""

android:layout_width="match_parent"

android:layout_height="match_parent"

tools:context=".MainActivity" >

android:onClick="javaCallC"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="Java调用C代码" />

MainActivity.java

package com.atguigu.jnihellodemo;

import android.app.Activity;

import android.os.Bundle;

import android.util.Log;

import android.view.View;

public class MainActivity extends Activity {

{

//加载库和LOCAL_MODULE := atguigu一致

System.loadLibrary("atguigu");

}

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

}

//点击事件-Java调用C语言

public void javaCallC(View view){

String result = say_111Hello();

Log.e("TAG","result==="+result );

}

/**

* native方法,方法没有参数,也需要在c文件中传参数

* 调用c代码后,从C代码中返回String类型

*/

public native String say_111Hello();

}

6、操作命令行

在项目的根目录下,shift+右键进入命令行,ndk-build   在libs生成armeabi文件夹,并且在其子目录生成libatguigu.so

在src的同级目录下,shift+右键进入命令行,javah com.atguigu.javacallc.MainActivity(mainActivity全路径),生成javah com.atguigu.javacallc.MainActivity.h文件,并将其拖入到jni目录中

7、创建.c文件

com

#include

#include

#include "com_atguigu_jnihellodemo_MainActivity.h"

/**

*路径的写法:Java_全类名_(把.变成_)方法名

* 因为:typedef const struct JNINativeInterface* JNIEnv; java与c沟通的环境变量结构体是一级指针

* JNIEnv* env参数:const struct JNINativeInterface** 是代表二级指针

* jobject jobj:谁调用了这个方法,就是谁;当前是MainActivity.this

*/

jstring Java_com_atguigu_jnihellodemo_MainActivity_say_1111Hello(JNIEnv* env,jobject jobj){

/*

* 结构体是一级指针(typedef const struct JNINativeInterface* JNIEnv;)

* 结构体方法:jstring

(*NewStringUTF)(JNIEnv*, const char*);

*/

char* text = "I am from C";

return (*env)->NewStringUTF(env,text);

//return (**env).NewStringUTF(env,text);

//return (**env).NewStringUTF(env,"I am from C");

}

——————————————下边来看下简易流程配置开发环境——————————

1、定位ndk的地址

window--preferences--NDK Location--F:\sdk\adt-bundle-windows-x86-20130917_2\android-ndk-r9(这是我的ndk地址)

2、在项目上点击右键--Android Tools--Add Native Support(我命名的是JniSimple),就会在libs下生成armeabi\libJniSimple.so

3、感觉乱乱的感觉,先贴下工程的配置文件吧

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值