Remove duplicate entries from hiddenapi files

Prevents the hiddenapi files index and metadata files from including
duplicate entries.

Bug: 178361284
Test: m droid
      Compared hiddenapi files before and after change
      Verified that the only differences were due to the removal of duplicates
      Used sort -u to remove duplicates from before file and compared with after file
Change-Id: I0b9e420aec42cdcf4584099a7ffd2ed9c3715d6d
diff --git a/java/hiddenapi.go b/java/hiddenapi.go
index eafbf5d..ada11c3 100644
--- a/java/hiddenapi.go
+++ b/java/hiddenapi.go
@@ -108,9 +108,18 @@
 		// not on the list then that will cause failures in the CtsHiddenApiBlacklist...
 		// tests.
 		if inList(bootJarName, ctx.Config().BootJars()) {
-			// Create ninja rules to generate various CSV files needed by hiddenapi and store the paths
-			// in the hiddenAPI structure.
-			h.hiddenAPIGenerateCSV(ctx, implementationJar)
+			// More than one library with the same classes may need to be encoded but only one should be
+			// used as a source of information for hidden API processing otherwise it will result in
+			// duplicate entries in the files.
+			if primary {
+				// Create ninja rules to generate various CSV files needed by hiddenapi and store the paths
+				// in the hiddenAPI structure.
+				h.hiddenAPIGenerateCSV(ctx, implementationJar)
+
+				// Save the unencoded dex jar so it can be used when generating the
+				// hiddenAPISingletonPathsStruct.stubFlags file.
+				h.bootDexJarPath = dexJar
+			}
 
 			// If this module is actually on the boot jars list and not providing
 			// hiddenapi information for a module on the boot jars list then encode
@@ -118,13 +127,6 @@
 			if name == bootJarName {
 				hiddenAPIJar := android.PathForModuleOut(ctx, "hiddenapi", name+".jar").OutputPath
 
-				// More than one library with the same classes can be encoded but only one can
-				// be added to the global set of flags, otherwise it will result in duplicate
-				// classes which is an error. Therefore, only add the dex jar of one of them
-				// to the global set of flags.
-				if primary {
-					h.bootDexJarPath = dexJar
-				}
 				hiddenAPIEncodeDex(ctx, hiddenAPIJar, dexJar, uncompressDex)
 				dexJar = hiddenAPIJar
 			}