android jni写hello world

第一个jni的hello world坑真多,看了几篇博文,修改了代码,终于成功了,特此记录一下过程:

1.新建项目,包名为com.test.hellojni,当要调用jni的函数时,类的包名要与com.test.hellojni包名一致,否则会报调用jni函数失败。

2.配置NDK环境:

打开sdk manager:勾选ndk,点击申请,即可安装好ndk(ndk后显示安装,则表示安装成功)

 在gradle.properties中加入代码:

android.deprecatedNdkCompileLease=1515138691572

local.properties显示NDK路径表示安装成功:

再配置NDK的环境变量:看图:

这是我的NDK安装目录:

命令行输入NDK-builde,输出如下,表示NDK的所有配置完毕:

新建JniTest类:(注意:这里的的的LoadLibrary(“JniTest”);中的JniTest命名应该和后面生成的所以前缀一致,若这样库文件为libJniTest.so,那么这里应该命名为JniTest)

package com.test.hellojni;

public class JniTest {
    static {
        System.loadLibrary("JniTest");
    }

    public static native String getNativeString();
}

打开命令行,进入项目所在的新建类的目录下,输入相关命令如下:

其中javah的执行路径不对,故报错,需要cd ../../ ..进入到java目录下:执行javah com.test.hellojni.JniTest如图:

此时会在Java的的目录下生成该类的.H文件,运行完命令后我的项目生成的文件如下:

 4.在src / main下新建jni floder文件

 然后删除之前建的JniTest.class文件,将com_test_hellojni_JniTest.h文件移到JNI文件下,在JNI下新建JniTest.c,内容如下:

#include <string.h>
#include <jni.h>

jstring Java_com_test_hellojni_getNativeString(JNIEnv *env, jobject thiz)
{
      // callJavaMethod(env, thiz);
       return (*env)->NewStringUTF(env, "Hello from JNI !");
}

6.jni下新建Android.mk :(注意:JniTest要与这样库的名字一致,JniTest.c与之前创建的.C一致,别的不用改)

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := JniTest

LOCAL_SRC_FILES := JniTest.c

include $(BUILD_SHARED_LIBRARY)

JNI下新建Application.mk:

APP_ABI := all

接下来用NDK建造命令生成的.so文件,命令行进入JNI目录,输入:NDK建造,生成的.so文件成功:

再MainActivity中通过JniTest.getNativeString()调用JNI的函数,后面将LIB下的所以文件移入应用下的LIB中,在的的build.gradle的机器人类加入:

在gradle.properties中添加代码:    

android.deprecatedNdkCompileLease=1515138691572

最后我的项目结构为:

 运行截图为:

后面会接着写如何动态生成链接库

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值