android studio进行NDK开发

由于要进行ffmpeg音视频推流等功能的实现,需要用到jni开发,那么就要进行ndk集成,结果使用eclipse的方式步骤是完成行不通的,用了几个小时研究as集成ndk的开发,搞定。废话不多说,开始干货

开发环境:android studio(2.0正式版)  ndk(12) SDK版本(21)。

步骤1:安装ndk,由于as强大的内置,直接在SDK MANAGER->SDK Tools 里面点击NDK下载

下载后查看local.properties,如下图


到此NDK的安装完成。

步骤2:创建工程project,创建module,在activity中编写代码,先声明本地方法和load本地库,这里不上图,直接拷代码了

public class MainActivity extends AppCompatActivity {

    private TextView textview;
    static {
        System.loadLibrary("worinimeimei");
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textview = (TextView) findViewById(R.id.tv);
        textview.setText(getStringFromC());
    }
    public native String getStringFromC();
}
这里注意一下,有的说v7包里的appcompatactivity会出问题,不过我的办法直接无视,全都有效。

步骤3:build-》make project,为了生成classes文件,其实用来生成.h文件的。这步我没空弄了,大家可以尝试一下,应该不需要这步。


然后成功build后应该是下图的样子:


步骤4:点击上图的Terminal,默认是进入当前的module目录,那么进入到java文件夹,即module/src/main/java。然后执行 javah 报名+类名 回车。我的是 javah com.xiaowu.nan.MainActivity  生效后再java下面会有com_xiaowu_nan_MainActivity.h文件。然后在main目录下创建jni类型的folder,如下图

将步骤4生成的.h文件拷贝到jni目录下,并对.h方法进行修改,要实现的功能,目录如图


jni里面的.h代码和生成的.h代码一样,但是需要改本地方法,那个你需要什么功能就自己写就好,我的如代码,然后在jni目录下创建一个.c文件,代码就是你刚才写的那些。如:

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_xiaowu_nan_MainActivity */

#ifndef _Included_com_xiaowu_nan_MainActivity
#define _Included_com_xiaowu_nan_MainActivity
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_com_xiaowu_nan_MainActivity
 * Method:    getStringFromC
 * Signature: ()Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_com_com_xiaowu_nan_MainActivity_getStringFromC
        (JNIEnv *env, jobject job){
    return (*env)->NewStringUTF(env,"我擦最后一次了");
}

#ifdef __cplusplus
}
#endif
#endif
到这里,本地代码已经实现,如果此时代码出现下图的提示


不要担心,直接在gradle》properties中添加这行代码   

android.useDeprecatedNdk=true

步骤5;在app中的build.gradle中defaultConfig中配置NDK 如我的

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.3"

    defaultConfig {
        applicationId "com.xiaowu.nan"
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
        ndk{
            moduleName "worinimeimei"  //这是c文件名称,activity里面要静态调用的
            abiFilters "armeabi","armeabi-v7a","x86"//这是配置适用的手机硬件系统
        }
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    sourceSets { main { jni.srcDirs = ['src/main/jni', 'src/main/jni/'] } }
}
然后build->makeproject 此时查看build/intermediates/下面是否生成了对应的ndk,有的话是否和我一样 如下图


如果一样,那就代表你彻底成功的完成了调用本地方法的流程,之后的就你自己来吧,慢慢玩吧。

纯手打,转载请注明。感谢尊重原创

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值