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,有的话是否和我一样 如下图
如果一样,那就代表你彻底成功的完成了调用本地方法的流程,之后的就你自己来吧,慢慢玩吧。
纯手打,转载请注明。感谢尊重原创
- Android studio进行NDK开发
- android studio进行NDK开发
- 在Android studio中进行NDK开发
- 使用Android Studio进行NDK开发
- 在Android studio中进行NDK开发
- 使用Android Studio进行NDK开发
- 使用 Android Studio 进行 NDK 开发
- Android Studio利用Gradle进行NDK开发
- android studio 进行ndk开发思考总结
- Android Studio进行NDK开发笔记
- Android Studio 进行NDK开发入门
- 使用Android studio进行NDK开发
- Android 使用Android Studio进行NDK-JNI开发
- Android studio NDK开发
- Android Studio开发NDK
- Android Studio ndk开发
- Android studio开发NDK
- Android Studio NDK开发
- Spark 基础 —— Seq
- ACM天梯赛练习L1-019. 谁先倒
- jQuery与Ajax的应用
- 以logistic Regression为例实现多类别分类及Python实现
- startActivityForResult()参数说明
- android studio进行NDK开发
- linux文件结构
- 五年专业编程的14个经验
- 写在开通博客之时----前言
- tomcat学习概要笔记
- C++第七次实验
- 答辩前准备
- mysql ibdata1文件清理
- Android中贝塞尔曲线的使用