打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Android Studio上面使用Ndk JNI 开发工程

     Ps:最近比较闲,so.多更新几篇博客算是总结一下.顺便鄙视一下有的programmer照搬网上面文章,并没有自己去进行相关的实践验证.导致网上面的博客千篇一律,只要最初写博客的人踩坑后面的人全都踩坑.对这类不经过实际检验就大抄特抄的人深深的鄙视一下

        ok  接下来我们进入今天的正题,也就是在Android studio里面如何正确的使用和配置ndk.如果有对jni不了解的童鞋建议先去学习下JNI技术再来看本篇博客.

        转载请标明出处:http://blog.csdn.net/unreliable_narrator?viewmode=contents

        老规矩,我们先来看看实现的效果:点击按钮就会调用c代码的方法,这里C代码的方法会返回一个字符串,我们将这个字符串进行展示.

                                       


         准备工作:首先我们来看看进行jni开发都需要哪些东西:Android studio1.51(正式版),android-ndk-r11b(http://www.androiddevtools.cn/下载地址),程序员一只.准备工作是将将ndk下载下来配置好NDK-HOME(方法和JAVA-HOME配置雷同,故不做赘述,不会自行百度,据说也可以不用配置(⊙﹏⊙)).

    下面开始手把手教程

     1.首先使用Android studio创建一个android工程.并且关联上ndk.这里关联的方式有两种一种是在工程设置里面进行配置,另外的一种是在工程目录的local.properties里面配置ndk的路径,两种方式选其中一种即可如下图所示:

       (方案一)

          

 

      (方案2)

      

   2.打开 grade.properties 文件,在末尾添加:android.useDeprecatedNdk=true.

                               

    3.然后在模块的build.gradle文件里面进行ndk参数的配置.      

apply plugin: 'com.android.application'android {    compileSdkVersion 23    buildToolsVersion '23.0.3'    defaultConfig {        applicationId 'com.dapeng.ndkdemo'        minSdkVersion 15        targetSdkVersion 23        versionCode 1        versionName '1.0'        ndk {            moduleName 'MyJniLibName'            //生成的so名字(可自己进行指定)            abiFilters 'armeabi', 'armeabi-v7a', 'x86'    //输出指定三种abi体系结构下的so库。目前可有可无(默认是全选的)。            //ldLibs 'log'                                //如果要使用log就把这个加上        }    }    buildTypes {        release {            minifyEnabled false            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'        }    }}dependencies {    compile fileTree(dir: 'libs', include: ['*.jar'])    testCompile 'junit:junit:4.12'    compile 'com.android.support:appcompat-v7:23.3.0'}

4.创建一个类编写调用c代码的方法.然后rebuild项目.加载库的名字就是上面我们在buil.gradle里面配置的moduleName.调用c代码的方法必须要用native进行修饰.(这里需要注意的是不能在里面写中文,包括注释,否则生成头文件会报错误: 编码GBK的不可映射字符           )

public class JniUtils {    static {        System.loadLibrary('MyJniLibName');       }    public native String getStringFromC(); }
5.待工程build完毕以后,进入到如下图所示的debug文件夹查看是否生成了我们编写的类对应的.class文件.目录如下.

                                                          


6. 如果正确的生成了class文件,接下来生成头文件.打开android studio的terminal(android studio自带的控制台,在win10上面需要进行设置才能正常的输入,具体方式问度娘)或者是cmd控制台.使用jdk的生成工具生成头文件.先cd到我们的模块的java文件夹下,然后使用javah -jni 调用C代码的类的全路径名称.这里千万要看清楚是在哪个路径下编译生成的.生成好以后就可以在工程目录下看到.h格式头文件.(仔细看我贴出来的路径,app就是模块名)

                 

  

                                                         


7.依次点击工程new-folder-jnifolder生成jni文件夹(也可以自己在java包的同级目录下直接创建jni文件夹),在jni文件夹里面创意一个任意名称且是以.c格式结尾的文件.将刚刚生成的.h头文件里面的内容复制到.c文件里面并且进行编辑.

/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class com_dapeng_ndkdemo_JniUtils */#ifndef _Included_com_dapeng_ndkdemo_JniUtils#define _Included_com_dapeng_ndkdemo_JniUtils#ifdef __cplusplusextern 'C' {#endif/* * Class:     com_dapeng_ndkdemo_JniUtils * Method:    getStringFromC * Signature: ()Ljava/lang/String; */JNIEXPORT jstring JNICALL Java_com_dapeng_ndkdemo_JniUtils_getStringFromC        (JNIEnv *env, jobject obj) {    return (*env)->NewStringUTF(env, 'hello java from c');} ;#ifdef __cplusplus}#endif#endif
8.最后我们通过JniUtils里面的编写好的方法来调用c代码的方法.就可以了.至此所有代码编写完毕

public class MainActivity extends AppCompatActivity {    private TextView mTextView;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mTextView = (TextView) findViewById(R.id.tv);        findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                mTextView.setText(new JniUtils().getStringFromC());            }        });    }}

9.点击rebuild project ,待工程build完毕以后进入到buil的intermediates文件夹下面看看是否生成了ndk文件夹,接着再看看ndk文件夹里面是否有.so文件,如果有就说明大工告成了.that is all. plase enjory it.

                                                                                  



本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
[Android] 环境配置之Android Studio开发NDK
Android Studio ndk
Android NDK开发之从环境搭建到Demo级十步流
不使用Cygwin,在eclipse中快速开发JNI,一键生成C头文件.h,以及一键使用NDK交叉编译
Using NDK to Call C code from Android Apps
Android NDK 实战入门指南
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服