Skip to content
This repository was archived by the owner on Oct 18, 2024. It is now read-only.

Commit e9b4fc7

Browse files
committed
Fixed improper handling of APK redirect file (#470)
1 parent 09fdd54 commit e9b4fc7

File tree

3 files changed

+54
-32
lines changed

3 files changed

+54
-32
lines changed

app/src/main/java/com/itsaky/androidide/models/ApkMetadata.java

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -61,14 +61,9 @@ public static File findApkFile(@NonNull File listingFIle) {
6161

6262
// This sometimes might be a redirect to the listing file
6363
// So we have to handle this case too.
64-
final var redirectedFile = ListingFileRedirect.maybeExtractRedirectedFile(listingFIle);
65-
if (redirectedFile != null) {
66-
listingFIle = redirectedFile;
67-
}
68-
69-
final var dir = listingFIle.getParentFile();
70-
final var metadata =
71-
JSONUtility.gson.fromJson(new FileReader(listingFIle), ApkMetadata.class);
64+
final var redirectedFile = ListingFileRedirect.getListingFile(listingFIle).getAbsoluteFile();
65+
final var dir = redirectedFile.getParentFile();
66+
final var metadata = JSONUtility.gson.fromJson(new FileReader(redirectedFile), ApkMetadata.class);
7267
if (!isValid(metadata)) {
7368
LOG.warn("Invalid APK metadata:", metadata);
7469
return null;
@@ -128,13 +123,11 @@ private static boolean isValid(ApkMetadata metadata) {
128123
LOG.warn("Skipping output element because file is not APK:", element);
129124
continue;
130125
}
131-
132-
if (element.getOutputFile().endsWith(".apk")) {
133-
atLeastOneApk = true;
134-
break;
135-
}
126+
127+
atLeastOneApk = true;
128+
break;
136129
}
137-
130+
138131
LOG.debug("Output metadata validation succeeded");
139132
return atLeastOneApk;
140133
}

app/src/main/java/com/itsaky/androidide/utils/ListingFileRedirect.kt

Lines changed: 47 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -18,26 +18,55 @@
1818
package com.itsaky.androidide.utils
1919

2020
import java.io.File
21+
import java.io.PrintWriter
2122
import java.io.StringReader
22-
import java.util.*
23+
import java.util.Properties
2324

24-
class ListingFileRedirect {
25-
26-
companion object {
27-
/** Redirect file will have this marker as the first line as comment. */
28-
private const val REDIRECT_MARKER = "#- File Locator -"
29-
30-
/** Property name in a [Properties] for the metadata file location. */
31-
private const val REDIRECT_PROPERTY_NAME = "listingFile"
32-
33-
@JvmStatic
34-
fun maybeExtractRedirectedFile(redirectFile: File): File? {
35-
val fileContent = redirectFile.readText()
36-
return if (fileContent.startsWith(REDIRECT_MARKER)) {
37-
val fileLocator = Properties().also { it.load(StringReader(fileContent)) }
38-
val file = File(fileLocator.getProperty(REDIRECT_PROPERTY_NAME))
39-
if (!file.isAbsolute) redirectFile.parentFile!!.resolve(file) else file
40-
} else null
25+
object ListingFileRedirect {
26+
27+
/**
28+
* Redirect file will have this marker as the first line as comment.
29+
*/
30+
const val REDIRECT_MARKER = "#- File Locator -"
31+
32+
/**
33+
* Property name in a [Properties] for the metadata file location.
34+
*/
35+
const val REDIRECT_PROPERTY_NAME = "listingFile"
36+
37+
/**
38+
* Redirect file name used when for the artifact.
39+
*/
40+
const val REDIRECT_FILE_NAME = "redirect.txt"
41+
42+
fun writeRedirect(listingFile: File, into: File) {
43+
val path = try {
44+
into.parentFile!!.toPath().relativize(listingFile.toPath()).toString()
45+
} catch(ex: IllegalArgumentException) {
46+
listingFile.canonicalPath
4147
}
48+
PrintWriter(into).use {
49+
it.println(REDIRECT_MARKER)
50+
it.println("${REDIRECT_PROPERTY_NAME}=${path.replace("\\", "/")}")
51+
}
52+
}
53+
54+
private fun maybeExtractRedirectedFile(redirectFile: File, redirectFileContent: String? = null): File? {
55+
val fileContent = redirectFileContent ?: redirectFile.readText()
56+
return if (fileContent.startsWith(REDIRECT_MARKER)) {
57+
val fileLocator = Properties().also {
58+
it.load(StringReader(fileContent))
59+
}
60+
val file = File(fileLocator.getProperty(REDIRECT_PROPERTY_NAME))
61+
if(!file.isAbsolute)
62+
redirectFile.parentFile?.resolve(file)
63+
else
64+
file
65+
} else null
4266
}
67+
68+
@JvmStatic
69+
fun getListingFile(inputFile: File) =
70+
maybeExtractRedirectedFile(inputFile) ?: inputFile
4371
}
72+
0 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)