使用Android Studio开发NDK
来源:互联网 发布:温什么知什么的成语 编辑:程序博客网 时间:2024/05/21 13:22
1、NDK开发环境配置
在使用NDK之前,需要下载NDK支持包
可以先去网站下载好包再导入到AndroidStudio中
NDK下载地址:https://developer.android.com/ndk/downloads/index.html
或者直接在AndroidStudio中下载
这里我已经下载好并配置到AndroidStudio了
配置好NDK后我们还需要配置build.gradle文件,注意这里的gradle文件是Modle中的gradle
android{ ...... defaultConfig{ ...... ndk{ moduleName "myJniLibName" ldLibs "log" abiFilters "armeabi","armeabi-v7a","x86" } } ......}
moduleName:生成.so库文件的名称
ldLibs: 引入一些库,这里我们引入打印log所需要的库
abiFilters: 输出指定的三种abi体系结构下的so库文件
到这里我们的NDK开发环境就算集成好了
2、创建对应native方法的.h头文件
新建一个类GetString.java
/*** 获取字符* Created by zhuwentao on 2016-07-30.*/public class GetString { static { // 静态初始化代码块,这里加载的库名称要和 gradle 中定义的 moduleName 名称一致 System. loadLibrary( "myJniLibName"); } // 该处报红,是因为在本地没有对应的 JNI 函数,但不影响编译 public static native String getNativeStr();}
写完后需要使用 Build->Make Project 一下,生成.class文件,生成的.class文件在..\build\intermediates\classes\debug\zhuwentao\com\pathdemo下
打开cmd或者AndroidStudio中自带的Terminal,如果是Terminal则会自动进入到当前项目所在的根目录下
进入\src\main文件夹下,输入以下命令
javah -d jni -classpath D:\Users\Administrator\AppData\Local\Android\sdk\platforms\android-19\android.jar;..\..\build\intermediates\classes\debug zhuwentao.com.pathdemo.GetString
这里的“D:\Users\Administrator\AppData\Local\Android\sdk\platforms\android-19\android.jar”是我本机上的android.jar路径,”zhuwentao.com.pathdemo.GetString “是包名+需要编译的类名。
这两个路径需要根据你自己的本地路径进行修改。
这两个路径需要根据你自己的本地路径进行修改。
执行成功后就可以在main文件夹下发现多了个jni文件夹,里面有生成的.h头文件,jniTest.c文件是我们自己创建的,用来实现zhuwentao_com_pathdemo_GetString.h头文件中的方法。
zhuwentao_com_pathdemo_GetString.h文件的内容
/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* 要使用Log则需要引用 android/log.h 这个头文件 */#include <android/log.h>/* Header for class zhuwentao_com_pathdemo_GetString *//* 可以根据需要调用不同类型的 LOG */#ifndef LOG_TAG#define LOG_TAG "ANDROID_LOG"#define LOG_E(...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG , __VA_ARGS__)#define LOG_I(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG , __VA_ARGS__)#define LOG_W(...) __android_log_print(ANDROID_LOG_WARN, LOG_TAG , __VA_ARGS__)#define LOG_D(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG , __VA_ARGS__)#endif#ifndef _Included_zhuwentao_com_pathdemo_GetString#define _Included_zhuwentao_com_pathdemo_GetString#ifdef __cplusplusextern "C" {#endif/** Class: zhuwentao_com_pathdemo_GetString* Method: getNativeStr* Signature: ()Ljava/lang/String;*/JNIEXPORT jstring JNICALL Java_zhuwentao_com_pathdemo_GetString_getNativeStr (JNIEnv *, jclass);#ifdef __cplusplus}#endif#endif
编译生成的.so库文件在这个目录下
..\PathDemo\app\build\intermediates\ndk\debug\obj\local
3、在jniTest.c文件中实现.h头文件中的函数
#include "zhuwentao_com_pathdemo_GetString.h"JNIEXPORT jstring JNICALL Java_zhuwentao_com_pathdemo_GetString_getNativeStr (JNIEnv *env, jclass jObj){ LOG_E ("log 类型 _E"); LOG_I ("log 类型 _I"); LOG_D ("log 类型 _D"); LOG_W ("log 类型 _W"); return (*env)->NewStringUTF(env, "Hello World!!!"); }
功能就是返回一个“Hello World!!!”字符串,并打印不同的Log提示信息
4、Android界面展示
布局文件activity_main.xml
<? xml version= "1.0" encoding= "utf-8" ?><RelativeLayout xmlns: android ="http://schemas.android.com/apk/res/android" android :layout_width= "match_parent" android :layout_height= "match_parent" android :gravity= "center"> <TextView android:id= "@+id/tv_ndk_text" android:layout_width= "wrap_content" android:layout_height= "wrap_content" android:textSize= "28sp"/></RelativeLayout >
MainActivity.java文件
public class MainActivity extends AppCompatActivity { private TextView mTextView; @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout. activity_main); mTextView = (TextView) findViewById(R.id. tv_ndk_text); // 显示getNativeStr()返回的字符串 mTextView.setText(GetString. getNativeStr()); }}
运行项目
打印的Log信息
Android界面
0 0
- 使用Android Studio开发NDK
- 使用Android Studio开发NDK
- 使用Android Studio进行NDK开发
- 使用Android Studio进行NDK开发
- 使用 Android Studio 进行 NDK 开发
- Android studio 使用ndk开发JNI
- 使用Android studio进行NDK开发
- ndk系列——使用Android Studio 初探NDK开发
- NDK开发基础①使用Android Studio编写NDK
- NDK开发基础①使用Android Studio编写NDK
- Android studio NDK开发
- Android Studio开发NDK
- Android Studio ndk开发
- Android studio开发NDK
- Android Studio NDK开发
- Android Studio NDK 开发
- android studio ndk 开发
- Android Studio NDK开发
- win10+Ubuntu16.04双系统
- hdoj-5167-Fibonacci
- Redis笔记三之Java操作Redis
- hdu 1281 棋盘游戏 二分图匹配 匈牙利算法 解题报告
- django学习笔记一
- 使用Android Studio开发NDK
- InnoDB与MyISAM的六大区别(转)
- URAL 2024 Adventure Time 思维题、Interesting
- Java容器四:Hashtable
- 七牛的存储算法猜测
- myisam和innodb索引实现的不同
- JDBC的基本操作
- java PropertyChangeSupport类详解
- error C2143: 语法错误 : 缺少“;”(在“类型”的前面)