Android ndk开发-第一个demo

0.工程的local.properties中配置ndk
ndk.dir=D\:\\AndroidSDK\\ndk-bundle
sdk.dir=D\:\\AndroidSDK
1.src/main/java/com/example/test中添加Java2CJNI.java
package com.example.test;

/**
 * Created by forlan on 2019/5/27
 */
public class Java2CJNI {
    /*static {
        System.loadLibrary("Java2CJNI");
    }*/
    //先屏蔽这一段逻辑,因为so还没有生成,最后运行的时候再放开
    public native static String java2C();
}

make project,生成.class文件

2.创建src/main/jni目录
3.创建com_example_test_Java2CJNI.h和Java2C.c
//命令创建.h
D:\AS_workspace\TestApk\app\build\intermediates\classes\debug>javah com.example.test.Java2CJNI

在这里插入图片描述
创建.c

//
// Created by forlan on 2019/5/27.
//
#include <jni.h>
#include <stdio.h>
#include "com_example_test_Java2CJNI.h"

JNIEXPORT jstring JNICALL Java_com_example_test_Java2CJNI_java2C(JNIEnv *env, jclass instance)
{
    return (*env)->NewStringUTF(env, "I am from Native C !");
}

创建完成后,将.c .h移动到jni目录

4.jni中创建Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

LOCAL_MODULE := Java2CJNI
LOCAL_SRC_FILES := Java2C.c
include $(BUILD_SHARED_LIBRARY)
5.app build.gradle android包里面添加
apply plugin: 'com.android.application'
android {
    compileSdkVersion 27
    defaultConfig {
        minSdkVersion 19
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
       //add 1
        ndk {
            moduleName "Java2C"
            abiFilters "armeabi-v7a", "arm64-v8a", "x86"
        }
    }
    
    //add 2
    externalNativeBuild {
        ndkBuild {
            path "src/main/jni/Android.mk"
        }
    }
6.rebuild project

在这里插入图片描述

7.run app
@Override
public void onCreate(Bundle savedInstanceState) {
    getWindow().setBackgroundDrawable(getResources().getDrawable(R.drawable.window_bg));
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_fourth);
    Log.d(TAG, "forlan debug jni str is " + Java2CJNI.java2C());

在这里插入图片描述

发布了42 篇原创文章 · 获赞 24 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/u010725171/article/details/90668242