Fix prebuilt_stubs_sources to work with no stubs sources
The framework-sdkextension java_sdk_library module defines an API for public, system and module_lib API surfaces but the public API is empty. The empty public API results in an empty .srcjar being repackaged and merged into the sdkextension-sdk snapshot and results in no directory for the public API stubs sources being created. Unfortunately, the Android.bp file in the snapshot is created by Soong and it does not know that the public API will be empty and so it creates an Android.bp file that references the directory into which the stubs sources should be added but which ends up not existing in the snapshot. Referencing a non-existent directory causes a build failure. This change fixes that issue by using PathForModuleSrc with no path components to get the path to the module directory (which must exist) and then resolving the module relative local src directory against that. The local src directory is globbed to find all the files, which will return an empty set of paths if the directory does not exist. Finally, the file paths are passed as an rsp file to soong_zip to avoid exceeding any command line limits. Many other different approaches were considered: * Adding a property to the java_sdk_library to indicate that the public API was actually empty. That would require extra maintenance by developers and would require some extra checks to be performed after generating the stubs source to ensure that it was empty which would complicate the build process. * Creating a directory with some placeholder file (empty directories don't work well with git) that would force the creation of the directory. That file would most likely be created whether the API was empty or not, would need to be stored in git alongside the source and could be quite confusing to reviewers. Bug: 173508731 Test: m nothing - to run new tests Build sdkextension-sdk, unpack it and then build the .srcjar files for the public, system and module_lib API surfaces. Without this change the build failed, reporting that the stubs_sources directory for the public API did not exist. With this change the build succeeded. Checked the contents of the resulting .srcjar files and made sure that the public one was empty and the others contained the SdkExtensions.java class and a package-info.java file. Change-Id: Ia468a3f37349f2dbc21db67744bda6461498d515
Loading
Please register or sign in to comment