Use a presingleton to create hiddenapi singleton paths early

If no module uses hiddenapi (because it is an unbundled build that
does not build any boot image modules), then the makevars singleton
panics because it will always run before the hiddenapi singleton
(due to package init() function ordering), and the hiddenapi singleton
paths have not been initialized yet.  Add a presingleton to initialize
the paths early.

Bug: 123645297
Test: tapas Launcher3 && m on unbundled branch
Change-Id: I9386ac87848a2181f51140129288df80fff9acfd
diff --git a/java/hiddenapi_singleton.go b/java/hiddenapi_singleton.go
index 96de755..d43e276 100644
--- a/java/hiddenapi_singleton.go
+++ b/java/hiddenapi_singleton.go
@@ -19,6 +19,7 @@
 )
 
 func init() {
+	android.RegisterPreSingletonType("pre-hiddenapi", hiddenAPIPreSingletonFactory)
 	android.RegisterSingletonType("hiddenapi", hiddenAPISingletonFactory)
 }
 
@@ -43,6 +44,18 @@
 	}).(hiddenAPISingletonPathsStruct)
 }
 
+func hiddenAPIPreSingletonFactory() android.Singleton {
+	return hiddenAPIPreSingleton{}
+}
+
+type hiddenAPIPreSingleton struct{}
+
+// hiddenAPI pre-singleton rules to ensure paths are always generated before
+// makevars
+func (hiddenAPIPreSingleton) GenerateBuildActions(ctx android.SingletonContext) {
+	hiddenAPISingletonPaths(ctx)
+}
+
 func hiddenAPISingletonFactory() android.Singleton {
 	return hiddenAPISingleton{}
 }