Skip to content

Commit 4d36ca8

Browse files
authored
redundancy: remove unspecial special cases (#3755)
As we discussed before, some of the dirs in RAW_DIRNAMES are treated as standard dirs in an APK, despite not being such. Instead of arbitrarily deciding what is known and what is unknown, we can make a concrete distinction: known dirs are dirs that are standard in APKs as generated by aapt: "assets", "lib" and "res". Everything else is app or library-specific and is unknown to aapt or smali/baksmali and should be treated as raw files that must be preserved as-is. "libs" (not "lib") is another example of a non-standard dir that might appear in specific APKs simply because the developers decided so, but it's not used for native libraries when calling loadLibrary. https://cs.android.com/android/platform/superproject/main/+/main:frameworks/base/core/java/android/app/LoadedApk.java;l=565 Thanks to refactoring done some months ago, everything in "unknown" is already being preserved when rebuilding an APK, no special considerations needed for kotlin.
1 parent 7e03efc commit 4d36ca8

File tree

10 files changed

+2
-141
lines changed

10 files changed

+2
-141
lines changed

brut.apktool/apktool-lib/src/main/java/brut/androlib/AaptInvoker.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,6 @@ private void invokeAapt2(File apkFile, File manifest, File resDir, File rawDir,
158158
cmd.add("--no-version-vectors");
159159
cmd.add("--no-version-transitions");
160160
cmd.add("--no-resource-deduping");
161-
162161
cmd.add("--no-compile-sdk-metadata");
163162

164163
// #3427 - Ignore stricter parsing during aapt2

brut.apktool/apktool-lib/src/main/java/brut/androlib/apk/ApkInfo.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929

3030
public class ApkInfo implements YamlSerializable {
3131
public static final String[] RESOURCES_DIRNAMES = { "res", "r", "R" };
32-
public static final String[] RAW_DIRNAMES = { "assets", "lib", "libs", "kotlin", "META-INF/services" };
32+
public static final String[] RAW_DIRNAMES = { "assets", "lib" };
3333

3434
public static final Pattern ORIGINAL_FILENAMES_PATTERN = Pattern.compile(
3535
"AndroidManifest\\.xml|META-INF/[^/]+\\.(RSA|SF|MF)|stamp-cert-sha256");

brut.apktool/apktool-lib/src/main/java/brut/androlib/res/decoder/AXmlResourceParser.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -810,7 +810,6 @@ private void doNext() throws IOException {
810810
continue;
811811
}
812812

813-
814813
if (chunkType == ARSCHeader.RES_XML_START_ELEMENT_TYPE) {
815814
mNamespaceIndex = mIn.readInt();
816815
mNameIndex = mIn.readInt();

brut.apktool/apktool-lib/src/test/java/brut/androlib/aapt1/BuildAndDecodeTest.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -536,7 +536,6 @@ public void resRawTest() throws BrutException {
536536

537537
@Test
538538
public void libsTest() throws BrutException {
539-
compareBinaryFolder("libs");
540539
compareBinaryFolder("lib");
541540
}
542541

@@ -569,9 +568,4 @@ public void singleDexTest() throws BrutException {
569568
compareBinaryFolder("smali");
570569
assertTrue(new File(sTestOrigDir, "build/apk/classes.dex").isFile());
571570
}
572-
573-
@Test
574-
public void confirmKotlinFolderPersistsTest() {
575-
assertTrue(new File(sTestNewDir, "kotlin").isDirectory());
576-
}
577571
}

brut.apktool/apktool-lib/src/test/java/brut/androlib/decode/DecodeKotlinCoroutinesTest.java

Lines changed: 0 additions & 73 deletions
This file was deleted.

brut.apktool/apktool-lib/src/test/java/brut/androlib/decode/DecodeKotlinTest.java

Lines changed: 0 additions & 57 deletions
This file was deleted.
Binary file not shown.
Binary file not shown.

brut.j.dir/src/main/java/brut/directory/AbstractDirectory.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -235,8 +235,8 @@ protected Map<String, AbstractDirectory> getAbstractDirs(boolean recursive) {
235235
return dirs;
236236
}
237237

238-
239238
public void close() throws IOException {
239+
// stub
240240
}
241241

242242
private SubPath getSubPath(String path) throws PathNotExist {

brut.j.dir/src/main/java/brut/directory/ZipRODirectory.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,6 @@ private ZipFile getZipFile() {
167167
return mZipFile;
168168
}
169169

170-
171170
public void close() throws IOException {
172171
mZipFile.close();
173172
}

0 commit comments

Comments
 (0)