标签:
AndroidStudio环境下ndk开发的基本步骤是,写本地方法生成头文件,用c/c++实现本地方法,配置android.mk文件生成so文件。具体步骤如下
1.创建android工程:MyJni。
2.写本地方法,并编译成class文件,在\app\build\intermediates\classes\debug中找。
public class MainActivity extends AppCompatActivity { static { System.loadLibrary("JniTest"); } public native String getStringFromNative(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView txtView = (TextView) findViewById(R.id.txt); txtView.setText(getStringFromNative()); } }3.用命令行编译成头文件:
javah -d jni -classpath D:\devolp\SDK\SDK\platforms\android-23\android.jar;D:\devolp\SDK\SDK\extras\android\support\v4\android-support-v4.jar;D:\devolp\SDK\SDK\extras\android\sup
port\v7\appcompat\libs\android-support-v7-appcompat.jar;E:\AndroidDev\Utils\MyJni\app\build\intermediates\classes\debug com.vko.myjni.MainActivity
在编译头文件时,可以选择javah -d app/src/jni 这样就可以省略第7步了
4.在jni文件夹中建c/c++文件,并写入代码
#include <jni.h> /* Header for class com_vko_myjni_MainActivity */ #ifndef _Included_com_vko_myjni_MainActivity #define _Included_com_vko_myjni_MainActivity #ifdef __cplusplus //以标准C形式输出 extern "C" { #endif JNIEXPORT jstring JNICALL Java_com_vko_myjni_MainActivity_getStringFromNative (JNIEnv * env, jobject){ return (*env)->NewStringUTF(env,"Hello From JNI!"); } #ifdef __cplusplus } #endif5.在jni文件夹中新建并配置android.mk文件
mk文件具体的可以参考android-ndk-r9\docs下的文档
#必须以LOCAL_PATH变量开头 LOCAL_PATH := $(call my-dir) #清除变量 include $(CLEAR_VARS) LOCAL_MODULE := JniTest LOCAL_SRC_FILES := main.c LOCAL_DEFAULT_CPP_EXTENSION := cpp #include $(BUILD_EXECUTABLE) #编译生成动态共享库 include $(BUILD_SHARED_LIBRARY)6.编译c/c++文件成为so文件。用命令行:ndk-build
可以看到
7.在app目录中build.gradle文件中加入
sourceSets { main { jniLibs.srcDirs = [‘libs‘] } }组成如下:
apply plugin: ‘com.android.application‘ android { compileSdkVersion 23 buildToolsVersion "23.0.1" defaultConfig { applicationId "com.vko.myjni" minSdkVersion 10 targetSdkVersion 23 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile(‘proguard-android.txt‘), ‘proguard-rules.pro‘ } } sourceSets { main { jniLibs.srcDirs = [‘libs‘] } } } dependencies { compile fileTree(dir: ‘libs‘, include: [‘*.jar‘]) compile ‘com.android.support:appcompat-v7:23.0.1‘ }7.将libs中的文件包括文件夹全部拷入到app目录中的libs文件夹中
删掉项目目录下libs、jni、obj目录不影响程序运行
8.运行android程序
标签:
原文地址:http://www.cnblogs.com/cjcblogs/p/4892566.html