美文网首页
android ndk 开发1

android ndk 开发1

作者: 客观开发者 | 来源:发表于2022-06-10 09:48 被阅读0次

    基础

    安装android studio 然后配置好 ndk 。
    这俩个需要调勾


    image.png

    创建项目


    image.png

    即可得一个demo 项目。

    java 和kotlin 中的使用

    image.png

    CMakeLists.txt
    内容

    cmake_minimum_required(VERSION 3.18.1)
    project("app")
    add_library(
            app
            SHARED
            native-lib.cpp
    )
    find_library(
            log-lib
            log
    )
    target_link_libraries(
            app
            ${log-lib}
    )
    
    #include <jni.h>
    #include <string>
    
    /**
     * 返回 jstring
     * @param env
     * @return jstring
     */
    extern "C"
    JNIEXPORT jstring JNICALL
    Java_com_example_app_CppUtils_stringFromJNI(
            JNIEnv *env,
            jobject /* this */) {
        std::string hello = "Hello from C++";
        return env->NewStringUTF(hello.c_str());
    }
    
    /**
     * 返回 jint
     * @param env
     * @return jint
     */
    extern "C"
    JNIEXPORT jint JNICALL
    Java_com_example_app_AppCpp_add(JNIEnv *env, jobject thiz, jint a, jint b) {
        return a + b;
    }
    

    java 中使用

    package com.example.app;
    
    /**
     * java 版本
     */
    public class AppCpp {
    
        static {
            System.loadLibrary("app");
        }
    
        public native int add(int a, int b);
    
    }
    
    

    kotlin 中的版本

    package com.example.app
    
    /**
     *
     * kotlin 版本
     *
     */
    object CppUtils {
    
        init {
            System.loadLibrary("app")
        }
    
        external fun stringFromJNI(): String
    
    }
    

    最重要的是包名 要正确。。。

    打包可以生产出


    image.png

    我感觉不全呢发现了一个问题

    问题原因

    当前(20200702)NDK基本为20甚至21版本,而根据Android官网AndroidABIs页面提示,从v17开始就不再支持armeabimips架构

    怎么用

    image.png

    看图复制到项目里面

    配置build里面参数

    
    defaultConfig {
          .......
            ndk {
                abiFilters "armeabi-v7a", "arm64-v8a", "x86", "x86_64"
            }
    
        }
     
        sourceSets {
            main {
                assets {
                    jniLibs.srcDirs = ['libs']
                }
            }
        }
    
    

    其他内容我删除了。然后再用

    这个包里面内容


    image.png image.png

    我上面的demo 内容是

    extern "C"
    JNIEXPORT jstring JNICALL
    Java_com_example_app_MainActivity_stringFromJNI(
            JNIEnv *env,
            jobject /* this */) {
        std::string hello = "Hello from C++";
        return env->NewStringUTF(hello.c_str());
    }
    

    这里的包名和很重要
    Java_com_example_app_MainActivity_stringFromJNI(

    相关文章

      网友评论

          本文标题:android ndk 开发1

          本文链接:https://www.haomeiwen.com/subject/wreumrtx.html