如何优雅地使用NDK[功能补充]
2016-05-08 00:35
429 查看
说在前面的话:这篇文章是看了如何优雅地使用NDK后,对原博客功能的补充。为了方便大家的阅读顺序,直接添加到原博客之中,如有侵犯版权,请联系我。这篇博客有转载,有原创,只是在原博客上做了修改,故分类到原创,如有不对,请大家留言指正。
本博客转载地址如下:
如何优雅地使用NDK
在Android Studio上使用了一段时间的NDK,感觉官方的插件com.android.tools.build.gradle-experimental还是不够稳定,存在一定问题,不过谷歌也声明了这个插件是在实验性阶段。幸好官方在Android Studio上提供了另一种方式使用NDK,这篇博客就讲讲这种到目前为止我觉得非常赞的方法。
下载好NDK,自己手动下载或者用SDK工具下载都可以
我使用的版本:Android Studio 1.5.1
如下图所示,我添加了三个命令,按加号添加
其中一个命令的配置详情如下图:
命令配置参数:
javah用于生成头文件
Program:
Parameters:
注意:这个命令我加上了-encoding UTF-8指定编码,你可以改成你工程的编码。
Working directory:
ndk-build用于构建so包
Program:
注意:windows用
Parameters: 什么都不用填
Working directory:
ndk-build clean清除so包
Program:
注意:windows用
Parameters: clean
Working directory:
==========这里原博客没有,补充开始==========
makefile 用于生成android.mk和application.mk
以及向gradle.properties和local.properties文件中添加的固定配置
Program:
Parameters:
Working directory:
makefile.cmd源代码如下:
注意:D:\DevelopKit\android-ndk-r10e 这个改成自己的NDK所在目录,其他的就不用改了
命令使用说明:
javah命令:在包含native方法的类上执行,会生成对应该类的头文件,如果有多个包含native方法的类,对应执行一次
makefile命令:点击希望成为模块的c/c++源文件,以此源文件的文件名为模块,对应Android.mk中的LOCAL_MODULE和
Application.mk中的APP_MODULES,LOCAL_SRC_FILES后面的参数会根据jni目录下的c/c++源文件全部罗列上去。
参考下图理解
补充这些可以不用配置
Android.mk
自动生成,可以修改其中的配置
Application.mk
自动生成,可以修改其中的配置
local.properties 自动添加固定配置
如 D:\DevelopKit\android-ndk-r10e 这是我的NDK目录
gradle.properties 自动添加固定配置
直接改好上面makefile.cmd(这个文件是用dos命令行编写的)中对应自己的配置就可以了。是不是又让你减少点体力?希望如此吧,嘿嘿…
对于我添加的这段补充,有什么不懂得可以问我,博客的配置流程,我也亲自试用了,为大神点赞,特别好用,推荐大家看看哦。
==========这里原博客没有,补充结束==========
配置完三个命令之后,你就可以在右键菜单中找到这几个命令,可以直接使用。如下图演示了生成NdkTest类的头文件
配置工程
让工程项目使用NDK,需要做一些配置工作
在local.properties文件中填写使用的NDK
gradle.properties文件中添加如下代码
在module的build.gradle添加如下代码:
Hello word
按上面的步骤全都配置完之后就可以在Android Studio上享受NDK了。
下面写一个简单的返回Hello word字符串的程序。
首先在java中声明一个本地方法,并加载本地库,如下:
生成它的头文件(自动生成的名字是包名+类名me_majiajie_ndktest_NdkTest.h),并且创建c/c++文件(NdkTest.cpp),如下:
在jni目录创建一个文件命名为Android.mk,填入以下内容
然后在jni目录创建一个文件命名为Application.mk,填入以下内容
注意:Android.mk和Application.mk都是NDK默认的配置文件,关于这两个文件的详细介绍可以看官网。
最后生成so包就可以了,记住每次修改C文件都需要重新生成so包:
本博客转载地址如下:
如何优雅地使用NDK
在Android Studio上使用了一段时间的NDK,感觉官方的插件com.android.tools.build.gradle-experimental还是不够稳定,存在一定问题,不过谷歌也声明了这个插件是在实验性阶段。幸好官方在Android Studio上提供了另一种方式使用NDK,这篇博客就讲讲这种到目前为止我觉得非常赞的方法。
开发环境
基础的安卓开发环境:Android Studio、SDK、JDK下载好NDK,自己手动下载或者用SDK工具下载都可以
我使用的版本:Android Studio 1.5.1
配置常用命令
NDK开发比较常用的命令就是生成头文件、构建so包,在android studio上我们可以先配置好命令,使用起来就很方便了,这是我感觉最赞的地方。如下图所示,我添加了三个命令,按加号添加
其中一个命令的配置详情如下图:
命令配置参数:
javah用于生成头文件
Program:
$JDKPath$/bin/javah
Parameters:
-encoding UTF-8 -d ../jni -jni $FileClass$
注意:这个命令我加上了-encoding UTF-8指定编码,你可以改成你工程的编码。
Working directory:
$SourcepathEntry$\..\java
ndk-build用于构建so包
Program:
你的NDK目录\build\ndk-build.cmd
注意:windows用
ndk-build.cmd,MAC/Linux用
ndk-build
Parameters: 什么都不用填
Working directory:
$ModuleFileDir$\src\main
ndk-build clean清除so包
Program:
你的NDK目录\build\ndk-build.cmd
注意:windows用
ndk-build.cmd,MAC/Linux用
ndk-build
Parameters: clean
Working directory:
$ModuleFileDir$\src\main
==========这里原博客没有,补充开始==========
makefile 用于生成android.mk和application.mk
以及向gradle.properties和local.properties文件中添加的固定配置
Program:
你的NDK目录\makefile.cmd
注意:makefile.cmd源码如下,请自行放到对应上面的目录
Parameters:
$FileName$ $ProjectFileDir$
Working directory:
$FileDir$
makefile.cmd源代码如下:
@echo off rem 参数1无需手动传入,右键执行makefile命令即可 rem c/c++源文件名(带后缀名) set Paramter1=%1 rem 参数2项目所在目录 set Paramter2=%2 set Dot=%Paramter1:~-2,-1% rem 自动判断c/c++文件,生成相应参数 if "."=="%Dot%" ( set FileName=%Paramter1:~0,-2% ) else ( set FileName=%Paramter1:~0,-4% ) rem Android.mk文件中参数 echo LOCAL_PATH := $(call my-dir)> Android.mk echo include $(CLEAR_VARS)>> Android.mk echo. >> Android.mk echo LOCAL_MODULE := %FileName%>> Android.mk echo |set /p=LOCAL_SRC_FILES :=>> Android.mk rem 遍历当前文件夹下所有c/c++源文件 FOR /R %%i in ( *.c *.cpp ) do ( echo |set /p= %%~nxi>> Android.mk ) echo.>> Android.mk echo include $(BUILD_SHARED_LIBRARY)>> Android.mk rem Application.mk文件中参数 echo APP_MODULES := %FileName%> Application.mk echo. >> Application.mk echo APP_ABI := all >> Application.mk rem gradle.properties中追加配置 echo.>> %Paramter2%/gradle.properties echo android.useDeprecatedNdk=true>> %Paramter2%/gradle.properties rem local.properties中追加配置 echo.>> %Paramter2%/local.properties rem 注意:D\:\\DevelopKit\\android-ndk-r10e 这个改成自己的NDK所在目录 echo ndk.dir=D\:\\DevelopKit\\android-ndk-r10e>> %Paramter2%/local.properties
注意:D:\DevelopKit\android-ndk-r10e 这个改成自己的NDK所在目录,其他的就不用改了
命令使用说明:
javah命令:在包含native方法的类上执行,会生成对应该类的头文件,如果有多个包含native方法的类,对应执行一次
makefile命令:点击希望成为模块的c/c++源文件,以此源文件的文件名为模块,对应Android.mk中的LOCAL_MODULE和
Application.mk中的APP_MODULES,LOCAL_SRC_FILES后面的参数会根据jni目录下的c/c++源文件全部罗列上去。
参考下图理解
补充这些可以不用配置
Android.mk
自动生成,可以修改其中的配置
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := hello-jni LOCAL_SRC_FILES := hello-jni.cpp hello-jni2.cpp include $(BUILD_SHARED_LIBRARY)
Application.mk
自动生成,可以修改其中的配置
APP_MODULES := hello-jni APP_ABI := all
local.properties 自动添加固定配置
ndk.dir=你的NDK目录的绝对路径
如 D:\DevelopKit\android-ndk-r10e 这是我的NDK目录
gradle.properties 自动添加固定配置
android.useDeprecatedNdk = true
直接改好上面makefile.cmd(这个文件是用dos命令行编写的)中对应自己的配置就可以了。是不是又让你减少点体力?希望如此吧,嘿嘿…
对于我添加的这段补充,有什么不懂得可以问我,博客的配置流程,我也亲自试用了,为大神点赞,特别好用,推荐大家看看哦。
==========这里原博客没有,补充结束==========
配置完三个命令之后,你就可以在右键菜单中找到这几个命令,可以直接使用。如下图演示了生成NdkTest类的头文件
配置工程
让工程项目使用NDK,需要做一些配置工作
在local.properties文件中填写使用的NDK
ndk.dir=你的NDK目录的绝对路径
gradle.properties文件中添加如下代码
android.useDeprecatedNdk = true
在module的build.gradle添加如下代码:
android { { ndk { moduleName "NdkTest"//定义NDKlibrary的名字 //ldLibs "log" 添加log库,看自己需求 } } //这里设置目录,默认就这样写就可以了 sourceSets { main { jni.srcDir "src/main/jni" jniLibs.srcDir "src/main/libs" } } }
Hello word
按上面的步骤全都配置完之后就可以在Android Studio上享受NDK了。
下面写一个简单的返回Hello word字符串的程序。
首先在java中声明一个本地方法,并加载本地库,如下:
public class NdkTest { static { System.loadLibrary("NdkTest"); } public static native String getString(); }
生成它的头文件(自动生成的名字是包名+类名me_majiajie_ndktest_NdkTest.h),并且创建c/c++文件(NdkTest.cpp),如下:
#include "me_majiajie_ndktest_NdkTest.h" JNIEXPORT jstring JNICALL Java_me_majiajie_ndktest_NdkTest_getString (JNIEnv *env, jclass jc) { return env->NewStringUTF("Hello word !!!"); }
在jni目录创建一个文件命名为Android.mk,填入以下内容
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := NdkTest LOCAL_SRC_FILES := NdkTest.cpp include $(BUILD_SHARED_LIBRARY)
然后在jni目录创建一个文件命名为Application.mk,填入以下内容
APP_MODULES := NdkTest APP_ABI := all
注意:Android.mk和Application.mk都是NDK默认的配置文件,关于这两个文件的详细介绍可以看官网。
最后生成so包就可以了,记住每次修改C文件都需要重新生成so包:
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories