private List<LoadSpec> processManifest(ZipFileSystem zipFS, GFile manifestFile,
			TaskMonitor monitor)
			throws IOException {

		List<LoadSpec> loadSpecs = new ArrayList<>();
		monitor.setMessage("Reading Android Manifest ...");
		try {
			ByteProvider byteProvider =
				zipFS.getByteProvider(manifestFile, monitor);

			try (AndroidXmlFileSystem xmlFS =
				openManifest(manifestFile.getName(), byteProvider, monitor)) {

				GFile xmlFile = xmlFS.getPayloadFile();
				ByteProvider xmlFileByteProvider = xmlFS.getByteProvider(xmlFile, monitor);

				SAXBuilder sax = XmlUtilities.createSecureSAXBuilder(false, false);
				Document document = sax.build(xmlFileByteProvider.getInputStream(0));
				Element rootElement = document.getRootElement();
				AndroidVersion version = getAndroidVersion(rootElement);

				List<QueryResult> queries =
					QueryOpinionService.query(getName(), DexConstants.MACHINE,
						String.valueOf(version.getVersionLetter()));

				for (QueryResult result : queries) {
					loadSpecs.add(new LoadSpec(this, 0, result));
				}
			}
		}
		catch (Exception e) {
			//ignore
		}
		return loadSpecs;
	}
Reads the Android manifest file and returns the
Android OS version string. For example, "N" or "S".
Use this string to select the appropriate Sleigh module
in the importer.
@param zipFS the ZIP file system of the APK file
@param manifestFile the manifest file from the ZIP
@param monitor the task monitor
@return Android OS version string. For example, "N" or "S".
@throws IOException if exception occurs reading the manifest file.
Ghidra/Features/FileFormats/src/main/java/ghidra/app/util/opinion/ApkLoader.java