Android Data Binding in Make file (Android.mk)

2.1k views Asked by At

As per a lot of examples, android data bindings are enabled by putting the following snippet in build.gradle file:

android {
    ....
    dataBinding {
        enabled = true
    }
}

However, I'm working on an android project in AOSP which builds using the make file (Android.mk).

So my question is: How can we add support for data-binding dependencies in android make file?

2

There are 2 answers

2
JoshuaMulliken On

I found a solution that works for me!

The first hurdle to climb will look something like this: error: package net.mulliken.pinenotenotebook.databinding does not exist

I found that Android Studio automatically generates these files. It was in app/build/generated/data_binding_base_class_source_out/debug/out/net/mulliken/pinenotenotebook/databinding. In order to incorporate this in my build I made a symbolic link from my Android studio workspace to databinding_src in my packages folder.

After that it still didn't work because it could not find the view binding package. You will probably get an error like this: error: package androidx.viewbinding does not exist

I found that google has a repo that includes this package and so I cloned it into my AOSP workspace under frameworks.

[me aosp/frameworks] $ git clone -b studio-main https://android.googlesource.com/platform/frameworks/data-binding data-binding

I then created a new symbolic link from that path into my package directory so that the compiler could find that class:

[me packages/apps/MyAPP] $ ln -s ../../../../frameworks/data-binding/extensions/viewbinding/src/main/java/ androidx_viewbinding_src

At the end of the day my Android.bp file looks like this:

android_app {
    name: "PineNoteNotebook",

    static_libs: [
        "androidx.appcompat_appcompat",
        "com.google.android.material_material",
        "androidx-constraintlayout_constraintlayout",
        "androidx.navigation_navigation-fragment",
        "androidx.navigation_navigation-ui",
    ],

    certificate: "platform",

    srcs: [
        "./**/*.java",
    ],

    resource_dirs: ["res"],

    product_specific: true,

    sdk_version: "current",

    optimize: {
        enabled: false
    },

    required: ["libpinenote"],
}

And my package tree looks like this:

.
├── Android.bp
├── AndroidManifest.xml -> /home/mulliken/AndroidStudioProjects/PineNoteNotebook/app/src/main/AndroidManifest.xml
├── androidx_viewbinding_src -> ../../../../frameworks/data-binding/extensions/viewbinding/src/main/java/
├── databinding_src -> /home/mulliken/AndroidStudioProjects/PineNoteNotebook/app/build/generated/data_binding_base_class_source_out/debug/out
├── res -> /home/mulliken/AndroidStudioProjects/PineNoteNotebook/app/src/main/res/
└── src -> /home/mulliken/AndroidStudioProjects/PineNoteNotebook/app/src/main/java/
1
B.mansouri On

i think you must use the latest android studio 3.6 version , with the latest ndk + add this to your android gradle

android {
    ...
    viewBinding {
        enabled = true
    }
}

check this : https://developer.android.com/topic/libraries/view-binding