Skip to content

This project sets up the NDK (Native Development Kit) in Android for communication between an Android project and C/C code. In this example, the C/C code simply prints a text message to the Android application.

Notifications You must be signed in to change notification settings

NicosNicolaou16/FlutterAndroidProjectAndNDK

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

58 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Flutter Android Project and NDK

This project sets up the NDK (Native Development Kit) in Android for communication between an Android project and C/C code. In this example, the C/C code simply prints a text message to the Android application.
For communication between Android Native and Flutter, I used a channel (refer to the documentation for more details). If you need an additional example of using channels, please check my repository for more information: ExampleChannelNativeAndroidWithCustomData.

Important

NOTE: EXAMPLE FOR ANDROID ONLY.

Setup - Steps

  • Install the latest NDK and CMake version from Android Studio SDK Manager from the SDK Tools section.
  • Create the cpp package, add the CMake .txt and .cpp file. Some name below is base on .cpp file name.
# For more information about using CMake with Android Studio, read the
# documentation: https://d.android.com/studio/projects/add-native-code.html

# Sets the minimum version of CMake required to build the native library.

cmake_minimum_required(VERSION 3.4.1)

# Creates and names a library, sets it as either STATIC
# or SHARED, and provides the relative paths to its source code.
# You can define multiple libraries, and CMake builds them for you.
# Gradle automatically packages shared libraries with your APK.

add_library( # Sets the name of the library.
        message # based on .cpp file name

        # Sets the library as a shared library.
        SHARED

        # Provides a relative path to your source file(s).
        message.cpp) # based on .cpp file name

# Searches for a specified prebuilt library and stores the path as a
# variable. Because CMake includes system libraries in the search path by
# default, you only need to specify the name of the public NDK library
# you want to add. CMake verifies that the library exists before
# completing its build.

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)

# Specifies libraries CMake should link to your target library. You
# can link multiple libraries, such as libraries you define in this
# build script, prebuilt third-party libraries, or system libraries.

target_link_libraries( # Specifies the target library.
        message # based on .cpp file name

        # Links the target library to the log library
        # included in the NDK.
        ${log-lib})
  • Add the follow code in Gradle file.
android {

    //Other Gradle Code Here...

    externalNativeBuild {
        cmake {
            path = file("src/main/cpp/CMakeLists.txt")
            version = "3.31.1"
        }
    }
    ndkVersion = "27.2.12479018"

    //Other Gradle Code Here...
}
  • Load the C/C file.
companion object {
    /**
     * Load the C file
     * */
    init {
        System.loadLibrary("message")
    }
}
  • Initialize the method(s) from .cpp file.
private external fun message(): String 

Important

Check my article 👉 NDK Setup on Android/Flutter Android Project - Medium 👈

Important

Similar project with (Kotlin Language) 👉 AndroidProjectAndNDK 👈

Versioning

Flutter SDK version: 3.27.1
Dart Version: 3.6.0

References/Tutorials Follow

https://github.com/android/ndk-samples
https://developer.android.com/studio/projects/add-native-code
https://blog.mindorks.com/getting-started-with-android-ndk-android-tutorial/
https://medium.com/@shreebhagwat94/flutter-platform-channel-46578d21e69
https://blog.devgenius.io/use-flutter-screens-in-native-android-app-share-data-among-them-d97d670807a6

About

This project sets up the NDK (Native Development Kit) in Android for communication between an Android project and C/C code. In this example, the C/C code simply prints a text message to the Android application.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published