Search code examples
androidandroid-gradle-pluginandroid-sourceandroid-soong

Android.bp for a Android Studio Native C++ App


Could someone show me an example of Android.bp for the Android Studio Native C++ app to compile it in AOSP source? It can be for the 'hello world' auto generated project.

Is there a tool that auto generates it?

Thank you


Solution

  • I am not sure if this is the best approach but I have created an AIDL inteface to bind Java and C++, and then compilated the java code as a android_app, the AIDL part as java_library_static and the C++ code as cc_library_shared in Android.bp file.

    cc_library_shared {
        name: "libjavanativetestapp",
        owner: "Álison Venâncio <alison.venancio@gmail.com>",
        vendor: true,
        srcs: [ "app/src/main/cpp/*.cpp" ],
        header_libs: [ "jni_headers" ],
        shared_libs: [ 
            "libutils",
            "liblog",
        ],
    }
    
    java_library_static {
        name: "vendor.alvenan.javanativetestapp",
        owner: "Álison Venâncio <alison.venancio@gmail.com>",
        srcs: [ "app/src/main/aidl/**/*.aidl" ],
        installable: true,
        sdk_version: "current",
    }
    
    android_app {
        name: "JavaNativeTestApp",
        owner: "Álison Venâncio <alison.venancio@gmail.com>",
        srcs: [ "app/src/main/java/**/*.java" ],
        resource_dirs: [ "app/src/main/res" ],
        static_libs: [
            "vendor.alvenan.timermanager",
            "vendor.alvenan.javanativetestapp",
            "com.google.android.material_material",
            "androidx-constraintlayout_constraintlayout",
            "androidx.test.ext.junit",
            "androidx.test.espresso.core",
        ],
        required: [
            "vendor.alvenan.javanativetestapp",
            "vendor.alvenan.timermanager",
            "libjavanativetestapp",
        ],
        optimize: {
            enabled: false
        },
        system_ext_specific: true,
        platform_apis: true,
        certificate: "platform",
        use_embedded_native_libs: true,
        privileged: true,
        manifest: "app/src/main/AndroidManifest.xml",
    }
    

    Here is the full code: https://github.com/alvenan/aosp_bench/tree/main/bench_test_jni/JavaNativeTestApp

    My only issue is that the app is looking for the shared library in system/lib64 while the compilation is sending the .so to vendor/lib64, but if I copy to system, all works fine.