Android Studio2.2 配置NDK

Android Studio2.2 配置NDK

本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明.

环境
  • 主机:WIN10
  • 开发环境:Android Studio2.2 Preview 3
步骤
  • 安装NDK 
    打开Tools->Android->SDK Manager->SDK Tools选中LLDB和NDK,点击确认,软件会自动安装NDK。 
  • 配置环境变量

    • 增加一项:NDK_ROOT,如:C:\soft\adt-bundle-windows-x86-20130911\sdk\ndk-bundle
    • 在path中增加%NDK_ROOT%
  • 在main中新建文件夹jni 

  • 新建hello-jni.c 
    函数需按照规则命名:Java_包名类名方法名
#include <string.h>
#include <jni.h>


/* This is a trivial JNI example where we use a native method
 * to return a new VM String. See the corresponding Java source
 * file located at:
 *
 *   apps/samples/hello-jni/project/src/com/example/hellojni/HelloJni.java
 */
//jstring
//Java_com_bazhangkeji_MainActivity_stringFromJNI( JNIEnv* env,
//                                                  jobject thiz )
//{
//    return (*env)->NewStringUTF(env, "Hello from JNI !");
//}


JNIEXPORT jstring JNICALL
Java_com_bazhangkeji_demo01_MainActivity_stringFromJNI(JNIEnv *env, jobject instance) {


//    // TODO
/

//
//    return (*env)->NewStringUTF(env, returnValue);
    return (*env)->NewStringUTF(env, "Hello from JNI !");
}
#include <string.h>
#include <jni.h>


/* This is a trivial JNI example where we use a native method
 * to return a new VM String. See the corresponding Java source
 * file located at:
 *
 *   apps/samples/hello-jni/project/src/com/example/hellojni/HelloJni.java
 */
//jstring
//Java_com_bazhangkeji_MainActivity_stringFromJNI( JNIEnv* env,
//                                                  jobject thiz )
//{
//    return (*env)->NewStringUTF(env, "Hello from JNI !");
//}


JNIEXPORT jstring JNICALL
Java_com_bazhangkeji_demo01_MainActivity_stringFromJNI(JNIEnv *env, jobject instance) {


//    // TODO
//
//
//    return (*env)->NewStringUTF(env, returnValue);
    return (*env)->NewStringUTF(env, "Hello from JNI !");
}
  • 新建Android.mk
LOCAL_PATH := $(call my-dir)


include $(CLEAR_VARS)


LOCAL_MODULE    := hello-jni
LOCAL_SRC_FILES := hello-jni.c


include $(BUILD_SHARED_LIBRARY)

  • 在build.gradle中配置 
    配置好,make project即可生成.so文件在app\build\intermediates\ndk-build\debug\lib中。 
    增加语句:
externalNativeBuild {
        ndkBuild {
            path file("src\\main\\jni\\Android.mk")
        }

全代码:
apply plugin: 'com.android.application'


android {
    compileSdkVersion 24
    buildToolsVersion "24.0.0"
    defaultConfig {
        applicationId "com.bazhangkeji.demo01"
        minSdkVersion 15
        targetSdkVersion 24
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"


//        ndk {
//            moduleName "libspeex"
//            cFlags "-std=c++11 -fexceptions"
//            ldLibs "log"
//            stl "gnustl_shared"
//            abiFilter "armeabi-v7a"
//        }
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }


    externalNativeBuild {
        ndkBuild {
            path file("src\\main\\jni\\Android.mk")
        }
    }
}
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:24.0.0'
    compile 'com.android.support.constraint:constraint-layout:1.0.0-alpha3'
    compile 'com.android.support:design:24.0.0'
    testCompile 'junit:junit:4.12'
    androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2'
    androidTestCompile 'com.android.support.test:runner:0.5'
    androidTestCompile 'com.androd.support:support-annotations:24.0.0'
}
  • 在java层调用

public class MainActivity extends AppCompatActivity {


    private static final int RECORDER_SAMPLERATE = 8000;
    private static final int RECORDER_CHANNELS = AudioFormat.CHANNEL_IN_MONO;
    private static final int RECORDER_AUDIO_ENCODING = AudioFormat.ENCODING_PCM_16BIT;
    private AudioRecord recorder = null;
    private Thread recordingThread = null;
    private boolean isRecording = false;




    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);


        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });


        setButtonHandlers();
        enableButtons(false);
        int bufferSize = AudioRecord.getMinBufferSize(RECORDER_SAMPLERATE,
                RECORDER_CHANNELS, RECORDER_AUDIO_ENCODING);


        System.out.println(stringFromJNI());
    }
    public native String stringFromJNI();
    public native String unimplementedStringFromJNI();
    static {
        System.loadLibrary("hello-jni");
    }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值