Android studio JNI开发

1.创建工程

这里写图片描述

2.使用as自带的SDK Manager下载NDK开发工具包

这里写图片描述

3.设置as使用 NDK 的路径(你下载后的ndk放在哪里,就设置这里是哪里的路径)

这里写图片描述

4.新建一个调用nkd本地方法的java类 NdkJniUtils

这里写图片描述

代码:

package com.kavinvip.jnitest;

/**
 * Created by kavin on 2017/1/23.
 */
public class NdkJniUtils {

    static {
        // 与 build.gradle里配置的 moduleName "jnitest" 要一致     //生成的so名字
        System.loadLibrary("jnitest");
    }

    public native String getCLanguageString();
}

5.利用NdkJniUtils.java文件生成的NdkJniUtils.class文件 去生成对应的 .h 文件

1)打开cmd终端切换到工程
命令 : cd C:\Users\kavin\Desktop\jnitest\app\build\intermediates\classes\debug
(如果没有classes目录点击重新构建工程一下Rebuild Project)
目录下执行 javah -jni com.kavinvip.jnitest.NdkJniUtils 命令 在当前目录下就会生成对应的
com_kavinvip_jnitest_NdkJniUtils.h 文件

这里写图片描述
这里写图片描述

下可以看到生成的 com_kavinvip_jnitest_NdkJniUtils.h 文件

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_kavinvip_jnitest_NdkJniUtils */

#ifndef _Included_com_kavinvip_jnitest_NdkJniUtils
#define _Included_com_kavinvip_jnitest_NdkJniUtils
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_kavinvip_jnitest_NdkJniUtils
 * Method:    getCLanguageString
 * Signature: ()Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_com_kavinvip_jnitest_NdkJniUtils_getCLanguageString
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

6. 在项目的src 文件下的 创建jni文件夹 注意 (右键main - new - Folder - JniFolder )

将生成的文件 com_kavinvip_jnitest_NdkJniUtils.h 剪切到jni文件夹下

7. 在jni 目录下创建一个jnitest.c 文件

#include <jni.h>
#include "com_kavinvip_jnitest_NdkJniUtils.h"
/*
 3  * Class:     io_github_yanbober_ndkapplication_NdkJniUtils
 4  * Method:    getCLanguageString
 5  * Signature: ()Ljava/lang/String;
 6  */
JNIEXPORT jstring JNICALL Java_com_kavinvip_jnitest_NdkJniUtils_getCLanguageString(JNIEnv *env, jobject obj)
{
  return (*env)->NewStringUTF(env,"This just a test for Android Studio NDK JNI developer!");
 }

8.下一步, 在app的build.gradle;

defaultConfig下添加

   ndk{
           moduleName "jnitext"         //生成的so名字
           abiFilters "armeabi", "armeabi-v7a", "x86"  //输出指定三种abi体系结构下的so库。目前可有可无。
   }

点击 make-project
生成 .so 库
此时报了 Error:(13, 0) Error: NDK integration is deprecated in the current plugin. Consider trying the new experimental plugin. For details, see http://tools.android.com/tech-docs/new-build-system/gradle-experimental. Set “android.useDeprecatedNdk=true” in gradle.properties to continue using the current NDK integration.
Open File
没关系

我们在 工程下的gradle.properties 添加属性

android.useDeprecatedNdk=true

9. 此时 补全 MainActivity的代码

package com.kavinvip.jnitest;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    private TextView mTextView;

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

        mTextView = (TextView) this.findViewById(R.id.test);

        NdkJniUtils jni = new NdkJniUtils();

        mTextView.setText(jni.getCLanguageString());
    }

}

ps: 生成的. so文件有些盆友找不到 。其实是在这里的。

这里写图片描述

简单的demo下载:http://download.youkuaiyun.com/download/csdm_admin/9744191

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值