码迷,mamicode.com
首页 > 移动开发 > 详细

AndroidStudio环境下ndk开发

时间:2015-10-19 19:06:59      阅读:230      评论:0      收藏:0      [点我收藏+]

标签:

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程序

 技术分享 

 

 

 

AndroidStudio环境下ndk开发

标签:

原文地址:http://www.cnblogs.com/cjcblogs/p/4892566.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!