Status Update
Comments
gh...@google.com <gh...@google.com>
je...@google.com <je...@google.com>
st...@google.com <st...@google.com> #2
I don't know much about prefab (or native dependencies in general) but this does sound like it could be an issue in AGP. Would it be possible for you to provide a simple Android project, with similar build configuration, that reproduces this issue?
Failing that, any information you can share about how your build is configured would be greatly appreciated, especially the bits that build the shared object files and how they get called by Gradle? (I understand there are some major options, like CMake and ndk-build, but, like I said, I don't really know the finer points)
st...@google.com <st...@google.com> #3
I did reproduce the issue in an integration test -- see this (internal) CL:
It looks to me like PrefabPackageTask
doesn't currently list the shared object files among its @Input
properties, but I'm not familiar enough with native builds to fix the issue on my own. Reassigning this bug to the native build team.
da...@google.com <da...@google.com> #4
That's embarrassing, but you do seem to be right! Probably more correct to depend on the library itself rather than the object files that comprise it. I'll try to find some time to look soon. Thanks for the test!
jo...@google.com <jo...@google.com> #5
jo...@google.com <jo...@google.com> #7
This should be fixed now (Internal Change-Id: Iecb3fc78d5322d3f1239326e3738fe00e13bcd1b). It will arrive in AGP 8.0 (Flamingo)
Description
AI-201.8743.12.41.7199119, JRE 1.8.0_242-release-1644-b3-6222593x64 JetBrains s.r.o, OS Linux(amd64) v5.11.0-18-generic, screens 5120x2880, 5120x2880
AS: 4.1.3; Kotlin plugin: 1.4.32-release-Studio4.1-1; Android Gradle Plugin: 4.1.3; Gradle: 6.5; NDK: from local.properties: (not specified), latest from SDK: (not found); LLDB: pinned revision 3.1 not found, latest from SDK: (package not found); CMake: from local.properties: (not specified), latest from SDK: 3.10.2, from PATH: 3.6.2
We are using prefab to package a native-only library in a submodule of our project that is then referenced as a dependency of our main application module. We have found that the first build works fine but subsequent builds don't because, even though any changes get compiled into new shared object files, those shared object files aren't being packaged into the AAR. Instead, the stale asset is used and the new changes aren't reflected in the build.
Currently, we are using a workaround where we automatically delete the build/intermediates/prefab_package directory in a Gradle preBuild step. This seems to fix the problem, but shouldn't be necessary.