• 一手遮天 Android Native Development Kit: NDK 简单示例


    项目地址 https://github.com/webabcd/AndroidDemo
    作者 webabcd

    一手遮天 Android - Native Development Kit: NDK 简单示例

    示例如下:

    /ndk/NdkDemo1.java

    /**
     * NDK 的简单示例
     *
     * 1、先配置 ndk-build
     * 在 File -> Settings -> Tools -> External Tools 中新增一项
     * name: ndk-build
     * Program: F:\Android\sdk\android-ndk-r23\ndk-build.cmd
     * Arguments: NDK_LIBS_OUT=D:\gitroot\AndroidDemo\app\src\main\jniLibs
     * Working directory: D:\gitroot\AndroidDemo\app\src\main
     *
     * 2、在 app\src\main 下新建 jni 目录(用于保存源代码文件)
     * 在 app\src\main 下新建 jniLibs 目录(用于保存编译后的 so 文件)
     *
     * 3、在 jni 文件夹上点击右键,然后单击 External Tools -> ndk-build 进行编译
     */
    
    package com.webabcd.androiddemo.ndk;
    
    import androidx.appcompat.app.AppCompatActivity;
    
    import android.os.Bundle;
    import android.widget.TextView;
    
    import com.webabcd.androiddemo.R;
    
    public class NdkDemo1 extends AppCompatActivity {
    
        private TextView _txtMsg;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_ndk_ndkdemo1);
    
            _txtMsg = this.findViewById(R.id.txtMsg);
    
            // 加载 so
            System.loadLibrary("jniHello");
    
            // java 调用 jni, c
            String resultC = helloJniC();
            _txtMsg.append(resultC);
        }
    
        // 调用 libjniHello.so 的 JNIEXPORT jstring JNICALL Java_com_webabcd_androiddemo_ndk_NdkDemo1_helloJniC(JNIEnv *env, jobject obj)
        public native String helloJniC();
    }
    

    /jni/cHello.h

    #include <jni.h>
    
    #ifndef _Included_com_webabcd_androiddemo_ndk_NdeDemo1
    #define _Included_com_webabcd_androiddemo_ndk_NdeDemo1
    #ifdef __cplusplus
    extern "C" {
    #endif
    
    JNIEXPORT jstring JNICALL Java_com_webabcd_androiddemo_ndk_NdkDemo1_helloJniC(JNIEnv *env, jobject obj);
    
    #ifdef __cplusplus
    }
    #endif
    #endif
    

    /jni/cHello.c

    #include "cHello.h"
    #include <stdlib.h>
    
    JNIEXPORT jstring JNICALL Java_com_webabcd_androiddemo_ndk_NdkDemo1_helloJniC(JNIEnv *env, jobject obj) {
        return (*env)->NewStringUTF(env, "hello: ndk");
    }
    

    /jni/Application.mk

    #如果没有用到 c++ 则可以不配置此文件
    

    /jni/Android.mk

    LOCAL_PATH := $(call my-dir)
    
    #模块1
    include $(CLEAR_VARS) #清除 LOCAL_MODULE, LOCAL_SRC_FILES 之类的变量
    LOCAL_CPP_EXTENSION := .cpp # C++ 文件的扩展名
    LOCAL_MODULE := jniHello # 模块名。如果模块名为“abc”,则此模块将会生成“libabc.so”文件。
    LOCAL_SRC_FILES := cHello.c # 需要编译的源文件
    include $(BUILD_SHARED_LIBRARY) # 编译当前模块
    
    #模块2
    

    /layout/activity_ndk_ndkdemo1.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <TextView
            android:id="@+id/txtMsg"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    
    </LinearLayout>
    

    项目地址 https://github.com/webabcd/AndroidDemo
    作者 webabcd

  • 相关阅读:
    [算法分析]计数排序
    [置顶] 基于stm32f103zet6之UC/OS_II的学习1(初步移植OS点灯大法)
    IOS开发(59)之Block Object的调用
    【译】测试员,敢问路在何方?来自微软工程师
    各种字符串hash
    hdu 2579 BFS
    qq相册
    程序人生之我们的故事:十年如歌(9)
    关联模型和无限极分类
    十大技巧破解电话面试
  • 原文地址:https://www.cnblogs.com/webabcd/p/android_ndk_NdkDemo1.html
Copyright © 2020-2023  润新知