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

1.2k Views Asked by At

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

2

There are 2 best solutions below

1
Álison Venâncio On BEST ANSWER

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 <[email protected]>",
    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 <[email protected]>",
    srcs: [ "app/src/main/aidl/**/*.aidl" ],
    installable: true,
    sdk_version: "current",
}

android_app {
    name: "JavaNativeTestApp",
    owner: "Álison Venâncio <[email protected]>",
    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.

2
satur9nine On

There are tons of examples in AOSP source at https://android.googlesource.com of C++ app bp build files.

Here is one particular example I found by searching for "cc_binary "

https://android.googlesource.com/platform/external/stressapptest/+/refs/heads/android13-gsi/Android.bp

You can see how that example might be boiled down to hello world simplicity and end up looking like:

cc_binary {
    name: "hello_world",
    srcs: [
        "src/main.cc",
    ],
    cflags: [
        "-DEXAMPLE",
    ],
}

I am not aware of a tool that generates bp files from some other type of build file at this time. On the other hand there is a tool that can take an Android.bp and create a CMake compatible build from it for the purposes of use in CLion, see https://android.googlesource.com/platform/build/soong/+/HEAD/docs/clion.md

More docs on soong bp files can be found at https://source.android.com/docs/setup/build and https://android.googlesource.com/platform/build/soong/+/refs/heads/master/README.md