android ndk视频教程
一. NDK介绍(1)前言
定义: Native Development Kit是安卓的工具开发包
NDK是安卓的,与Java没有直接关系。 快速开发C、C动态库,自动将so和APP应用打包到APK中
可以使用NDK在Android上使用JNI与本地代码交互以应用场景。 在Android场景中使用JNI
这意味着Android开发的功能需要本地代码实现的特征:
其他注意事项:
)2)手順使
与NDK关联声明Android项目所需调用的Native方法是使用在Android中声明的Native方法实现的,例如,在Android中需要与c进行交互的Ndroid本地代码
三、具体使用步骤如下。
Android NDK环境相关设置创建Andorid Studio项目和NDK本地代码文件Android.mk文件Application.mk文件编译上述文件并生成. so库文件。
详细说明放入工程文件中在Andoird Studio项目中使用NDK实现JNI功能的步骤:
步骤配置Android NDK环境的步骤说明:
一点一点地说明如何配置NDK环境。
)1)下载Android NDK工具包官网下载地址。 请注意,科学互联网正文中采用的Android NDK版本为android-ndk-r14b-darwin-x86_64
)2)解压缩NDK数据包注意:避免在解压缩路径中出现空格或中文建议。 将解压缩路径设置为Android Studio的SDK目录。
命名为ndk-bundle解压缩路径:/users/Carson _ ho/library/Android/SDK/ndk-bundle
优点:启动Android Studio后,Android Studio会自动检查并直接添加到NDK.dir中,因此使用时不需要配置Android Studio和ndk的相关工作
(3)安装结构NDK在终端依次输入以下命令
//输入以下命令pico .bash_profile //,然后输入以下命令export path=$ { path }:/users/Carson _ ho/library/Android/SDD 输入ndk-bundleexporta_ndk_root//注意检查空间、中英字符分隔//以下组合命令保存输入control X//后,
这里使用的是Andorid Studio。 与Eclipse不同,使用Eclipse的学生请自行寻找以下数据配置:
将配置添加到Gradle的local.properties
ndk.dir=/users/Carson _ ho/library/Android/SDK/NDK-bundlendk目录存储在SDK的目录中,并命名为ndk-bundle
将配置添加到Gradle的gradle.properties
Android.usedeprecatedNDK=true//早期版本的ndk支持
将ndk节点添加到Gradle的build.gradle
这样就完成了Andorid Studio的项目和NDK的关联。 下面介绍了如何在项目中使用NDK步骤3。 要创建本地代码文件,必须在Android项目中调用的本地代码文件中使用c
test.cpp
# include JNI.h # include stdio.h extern ' c ' { jniexportjstringjnicalljava _ scut _ Carson _ 1ho _ ndk _1demo _ main
在使用extern 'C' { }将本地方法包含在JNIEXPORT jstring JNICALL中的JNIEXPORT和JNICALL中,方法名称Java _ scut _ Carson _ 1ho _ ndk _ 1
如果我的软件包名称为scut.carson_ho.ndk_demo,则必须将其更改为scut_carson_1ho_ndk_1demo
最后,将创建的test.cpp文件放入工程文件目录的src/main/jni文件夹中
如果没有jni文件夹,请手动创建。
步骤4 )创建Android.mk文件的角色:指定有关源代码编译的配置信息,包括工作目录、编译模块的名称和参与编译的文件
具体使用:
Android.mk
my-dir是以Android.mk文件所在的目录include $(CLEAR_VARS )//local3354path开头的变量LOCAL_MODULE :=hello_jni//设置
最后,将上述文件同样放入src/main/jni文件夹中。
步骤5:Application.mk文件创建角色:配置编译平台相关内容具体使用: application.MK
APP_ABI :=armeabi//最常见的APP_ABI字段:指定armeabi x86 mips所在的CPU平台的. so文件//常规平台。
其中,移动设备主要是armeabi平台//默认,安卓平台为所有平台生成. so文件。 也就是说,在使用APP_ABI :=armeabi x86 mips//指定CPU平台类型后,
将仅生成该平台的. so文件。 这意味着上述语句只生成armeabi平台的. so文件,最后将这些文件放在src/main/jni文件夹中
步骤6 :编译上述文件并生成. so库文件经过上述步骤,src/main/jni文件夹中已经有三个文件
打开终端,然后输入以下命令
//步骤1 :此文件夹CD/users/Carson _ ho/androidstudioprojects/ndk _ demo/app/src/main/JNI//步骤2:NDK编译命令
编译成功后,将向src/main/添加两个文件夹libs obj。 其中, so库文件保存在libs下
步骤7:在src/main/中创建一个名为jniLibs的文件夹,并将上述生成的so文件夹放到该目录下
要把名为CPU平台的文件夹放进去,而不是把.so文件放进去如果本来就有.so文件,那么就直接创建名为jniLibs的文件夹并放进去就可以
步骤8:在Andoird Studio项目中使用NDK实现JNI功能
此时,我们已经将本地代码文件编译成.so库文件并放入到工程文件中在Java代码中调用本地代码中的方法,具体代码如下:MainActivity.java
public class MainActivity extends AppCompatActivity { //步骤1:加载生成的so库文件 //注意要跟.so库文件名相同 static { System.loadLibrary(‘hello_jni’); } //步骤2:定义在JNI中实现的方法 public native String getFromJNI(); //此处设置了一个按钮用于触发JNI方法 private Button Button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //通过Button调用JNI中的方法 Button=(Button) findViewById(R.id.button); Button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Button.setText(getFromJNI()); } }); }主布局文件:activity_main.xml
RelativeLayout xmlns:android=’http://schemas.android.com/apk/res/android’ xmlns:tools=’http://schemas.android.com/tools’ android:layout_width=’match_parent’ android:layout_height=’match_parent’ android:paddingBottom=’@dimen/activity_vertical_margin’ android:paddingLeft=’@dimen/activity_horizontal_margin’ android:paddingRight=’@dimen/activity_horizontal_margin’ android:paddingTop=’@dimen/activity_vertical_margin’ tools:context=’scut.carson_ho.ndk_demo.MainActivity’ //此处设置了一个按钮用于触发JNI方法 Button android:id=’@+id/button’ android:layout_centerInParent=’true’ android:layout_width=’300dp’ android:layout_height=’50dp’ android:text=’调用JNI代码’ //RelativeLayout结果展示
源码地址Carson-Ho的Github地址:NDK_Demogithub.com/Carson-Ho/NDK_Demo
四,Android Studio2.2 以上实现NDK如果你的Android Studio是2.2以上的,那么请采用下述方法
因为Android Studio2.2以上已经内部集成NDK,所以只需要在Android Studio内部进行配置就可以
步骤讲解步骤1:按提示创建工程在创建工程时,需要配置NDK,根据提示一步步安装即可。
步骤2:根据需求使用NDK配置好NDK后,Android Studio会自动生成C++文件并设置好调用的代码你只需要根据需求修改C++文件 Android就可以使用了。