android jni demo

 

第一步:编写kt代码

class NativeLib {

/**
* A native method that is implemented by the 'netconfig' native library,
* which is packaged with this application.
*/
external fun stringFromJNI(): String

companion object {
// Used to load the 'netconfig' library on application startup.
init {
System.loadLibrary("netconfig")
}
}
}

 

第二步:编写C代码

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

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

 

第三步:编写CMakeLists.txt

cmake_minimum_required(VERSION 3.18.1)


project("netconfig")


add_library( # Sets the name of the library.
             netconfig

             # Sets the library as a shared library.
             SHARED

             # Provides a relative path to your source file(s).
             netconfig.cpp )


find_library( # Sets the name of the path variable.
              log-lib

              # Specifies the name of the NDK library that
              # you want CMake to locate.
              log )

target_link_libraries( # Specifies the target library.
                       netconfig

                       # Links the target library to the log library
                       # included in the NDK.
                       ${log-lib} )

  

第四步:编写build.gralde配置

 
plugins {
    id 'com.android.library'
    id 'org.jetbrains.kotlin.android'
}

android {
    compileSdk 32

    defaultConfig {
        minSdk 29
        targetSdk 32

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        consumerProguardFiles "consumer-rules.pro"
        externalNativeBuild {
            cmake {
                cppFlags ""
            }
        }
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    externalNativeBuild {
        cmake {
            path "src/main/cpp/CMakeLists.txt"
            version "3.18.1"
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = '1.8'
    }
}

dependencies {

    implementation 'androidx.core:core-ktx:1.7.0'
    implementation 'androidx.appcompat:appcompat:1.3.0'
    implementation 'com.google.android.material:material:1.4.0'
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}

  

第五步:调用jni并运行android程序

    value = NativeLib().stringFromJNI()
Hello from C++"

https://gitee.com/Larack/my-config

posted @ 2022-07-21 13:25  狐狸已化妖  阅读(104)  评论(0编辑  收藏  举报