NDK编程初试

在学习NDK编程之前,看了很多网上的配置教程,这些教程要么时间久远,要么用到的工具的版本不是最新的,所以对于当前最新环境下的NDK配置以及开发,只能做一部分参考,下面来说下我的初试流程。


工具和环境:

Android 开发工具:Android Studio 2.1.2

Android NDK:android-ndk-r10d

java环境:jdk-8u60


1、新建一个Android工程


2、进入File —> Project Structure,配置NDK的所在路径


3、在gradle.properties的最后一行添加一句话,否则编译失败


android.useDeprecatedNdk=true


4、在MainActivity中加载so库,并调用JNI方法


package com.yyp.ndkdemo;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class MainActivity extends Activity {

    static {
        System.loadLibrary("jni-test"); //加载libjni-test.so这个库
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TextView textView = (TextView) findViewById(R.id.text);
        textView.setText(getString()); //调用JNI方法
    }

    public native String getString(); //JNI方法
}
 


5、在main目录下,New —> Folder — JNI Folder,新建一个jni目录,然后创建3个文件:test.c 、Android.mk 、Application.mk


1)test.c


#include <jni.h>

/**
 * 方法命名规则:Java_包名_类名_JNI方法名
 */
JNIEXPORT jstring JNICALL Java_com_yyp_ndkdemo_MainActivity_getString(JNIEnv *env, jobject this){
    return (*env)->NewStringUTF(env,"Hello from JNI!");
}
 

2)Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

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

include $(BUILD_SHARED_LIBRARY)
 


上面 jni-test so库名称test.cJNI调用的C代码


3)Application.mk


App_ABI := armeabi


APP_ABI表示cpu的架构平台的类型,如果为all,会编译生成所有cpu平台的so库


6、在app目录下的build.gradle中配置jni的资源文件路径,否则导入头文件<jni.h>会变红色,报错

android {
    ......
    sourceSets.main {
        jni.srcDirs = []
    }
}

7、打开Android Studio 的Terminal,cd进入到jni的上级目录,也就是main目录,然后输入命令ndk-build,最后就在main/libs/armeabi下生成一个叫libjni-test.so的库


D:\workspace_android\NDKDemo\app\src\main>ndk-build
[armeabi] Compile thumb  : jni-test <= test.c
[armeabi] SharedLibrary  : libjni-test.so
[armeabi] Install        : libjni-test.so => libs/armeabi/libjni-test.so



8、因为生成的so库默认都在libs下,所以为了以后操作方便,在app目录下的build.gradle中配置jniLibs的资源文件路径

android {
    ......
    
    sourceSets.main {
        jni.srcDirs = []
        jniLibs.srcDirs "src/main/libs"
    }
}


9、运行Android工程,成功,效果如下:





还有另一种方法,这里就不讲了,大家可以自己去试试。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值