您的位置:首页 > 移动开发 > Android开发

AndroidStudio环境下ndk开发

2015-10-19 17:57 141 查看
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

}

#endif


5.在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程序



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: