电脑配置好NDK环境这里不做介绍,可以搜索下网上。
在android sd中配置idk路径:在工程local.properties文件中加入
ndk.dir=/Users/xurunjie/Documents/android/android-ndk-r12b(自己idk路径)
在grade中配置:
defaultConfig { applicationId "com.example.xurunjie.myndkdemo" minSdkVersion 21 targetSdkVersion 23 versionCode 1 versionName "1.0" ndk{ moduleName "jnifile" //生成的so名字 abiFilters "armeabi", "armeabi-v7a", "x86" //输出指定三种abi体系结构下的so库。目前可有可无(现在默认生成所有环境下适用的so)。 } }
1.创建java类
public class Zoom1 { public native String getNameName(); static { System.loadLibrary("jnifile"); //defaultConfig.ndk.moduleName } }2.根据java 类获取.class文件
(1)j
xurunjiedeMacBook-Pro:~ xurunjie$ cd /Users/xurunjie/Desktop/MyNDKDemo/app/src/main/java/com/example/xurunjie/myndkdemo (自己的工程目录)
目录。通过命令xurunjiedeMacBook-Pro:myndkdemo xurunjie$ javac SourceUtils.java获取Zoom1.class文件
(2)编译工程。在build/intermediates/classes/debug中找到.class文件
3.根据.class获取.h文件。进入包名的上一级目录。如cd xurunjiedeMacBook-Pro:~ xurunjie$ cd /Users/xurunjie/Desktop/MyNDKDemo/app/src/main/java/
或cd xurunjiedeMacBook-Pro:myndkdemo xurunjie$ cd/Users/xurunjie/Desktop/MyNDKDemo/app/build/intermediates/classes/debug (有.class的目录,根据自己.class文件位置自己输入命令) java -jni com.example.xurunjie.myndkdemo.Zoom1(包名+类名)生成.h文件
4.在工程src目录下创建创建jni目录,将.h文件拷到该目录下。
5.根据.h创建.c文件(学过ios的应该知道。.c文件是对.h文件中方法的实现)
.h文件如下:
/* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class com_example_xurunjie_myndkdemo_Zoom1 */ #ifndef _Included_com_example_xurunjie_myndkdemo_Zoom1 #define _Included_com_example_xurunjie_myndkdemo_Zoom1 #ifdef __cplusplus extern "C" { #endif #undef com_example_xurunjie_myndkdemo_Zoom1_useNative #define com_example_xurunjie_myndkdemo_Zoom1_useNative 1L /* * Class: com_example_xurunjie_myndkdemo_Zoom1 * Method: nativeDecodeYUV422 * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_com_example_xurunjie_myndkdemo_Zoom1_getNameName (JNIEnv *, jclass); #ifdef __cplusplus } #endif #endif.c文件如下:
/* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* * Class: com_example_xurunjie_myndkdemo_Zoom1 * Method: nativeDecodeYUV422 * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_com_example_xurunjie_myndkdemo_Zoom1_getNameName (JNIEnv *env,jobject thiz){ return (*env)->NewStringUTF(env,"1111"); } }6.在jni目录下创建Android.mk文件(文件内容可参考:http://www.cnblogs.com/devinzhang/archive/2012/02/29/2373729.html)
# Copyright (C) 2009 The Android Open Source Project # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := jnifile(so名字,自己随意取) LOCAL_SRC_FILES := aaaa.c include $(BUILD_SHARED_LIBRARY)
7.进入jin目录。xurunjiedeMacBook-Pro:myndkdemo xurunjie$ cd /Users/xurunjie/Desktop/MyNDKDemo/app/src/main/jni
通过命令 xurunjiedeMacBook-Pro:jni xurunjie$ ndk-build声称so文件
8.说明:java操作比较耗时,c语言运算速度较快。(如图像的转化处理等)
(学习记录,有不对的希望大家指出)