android studio进行NDK开发

来源:互联网 发布:公务员考试成绩算法 编辑:程序博客网 时间:2024/05/29 19:43

由于要进行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 __cplusplusextern "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