mirror of
https://github.com/revanced/Apktool.git
synced 2024-10-14 08:43:37 +02:00
fix: redo aapt provider implementation
This commit is contained in:
parent
08822dcb98
commit
37470c018d
2
.github/workflows/revancedbuild.yml
vendored
2
.github/workflows/revancedbuild.yml
vendored
@ -56,7 +56,7 @@ jobs:
|
|||||||
cache: gradle
|
cache: gradle
|
||||||
- name: Make gradlew executable
|
- name: Make gradlew executable
|
||||||
run: chmod +x gradlew
|
run: chmod +x gradlew
|
||||||
- name: Build with Gradle
|
- name: Publish with Gradle
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
run: ./gradlew publish
|
run: ./gradlew publish
|
||||||
|
@ -45,6 +45,18 @@ import java.util.zip.ZipFile;
|
|||||||
import java.util.zip.ZipOutputStream;
|
import java.util.zip.ZipOutputStream;
|
||||||
|
|
||||||
final public class AndrolibResources {
|
final public class AndrolibResources {
|
||||||
|
// The aapt provider. Default is AaptManager for Mac, Linux & Windows.
|
||||||
|
// May be overridden.
|
||||||
|
private static AaptProvider AAPT_PROVIDER = new AaptManager();
|
||||||
|
|
||||||
|
public static AaptProvider getAaptProvider() {
|
||||||
|
return AAPT_PROVIDER;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setAaptProvider(AaptProvider aaptProvider) {
|
||||||
|
AAPT_PROVIDER = aaptProvider;
|
||||||
|
}
|
||||||
|
|
||||||
public ResTable getResTable(ExtFile apkFile) throws AndrolibException {
|
public ResTable getResTable(ExtFile apkFile) throws AndrolibException {
|
||||||
return getResTable(apkFile, true);
|
return getResTable(apkFile, true);
|
||||||
}
|
}
|
||||||
@ -1014,9 +1026,9 @@ final public class AndrolibResources {
|
|||||||
private File getAaptBinaryFile() throws AndrolibException {
|
private File getAaptBinaryFile() throws AndrolibException {
|
||||||
try {
|
try {
|
||||||
if (getAaptVersion() == 2) {
|
if (getAaptVersion() == 2) {
|
||||||
return AaptManager.getAapt2();
|
return getAaptProvider().getAapt2();
|
||||||
}
|
}
|
||||||
return AaptManager.getAapt1();
|
return getAaptProvider().getAapt1();
|
||||||
} catch (BrutException ex) {
|
} catch (BrutException ex) {
|
||||||
throw new AndrolibException(ex);
|
throw new AndrolibException(ex);
|
||||||
}
|
}
|
||||||
|
@ -17,25 +17,18 @@
|
|||||||
package brut.util;
|
package brut.util;
|
||||||
|
|
||||||
import brut.common.BrutException;
|
import brut.common.BrutException;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class AaptManager {
|
public class AaptManager implements AaptProvider {
|
||||||
|
|
||||||
public static File getAapt2() throws BrutException {
|
|
||||||
return getAapt(2);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static File getAapt1() throws BrutException {
|
|
||||||
return getAapt(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static File getAapt(Integer version) throws BrutException {
|
private static File getAapt(Integer version) throws BrutException {
|
||||||
File aaptBinary;
|
File aaptBinary;
|
||||||
String aaptVersion = getAaptBinaryName(version);
|
String aaptVersion = getAaptBinaryName(version);
|
||||||
|
|
||||||
if (! OSDetection.is64Bit() && OSDetection.isMacOSX()) {
|
if (!OSDetection.is64Bit() && OSDetection.isMacOSX()) {
|
||||||
throw new BrutException("32 bit OS detected. No 32 bit binaries available.");
|
throw new BrutException("32 bit OS detected. No 32 bit binaries available.");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -64,7 +57,7 @@ public class AaptManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static String getAaptExecutionCommand(String aaptPath, File aapt) throws BrutException {
|
public static String getAaptExecutionCommand(String aaptPath, File aapt) throws BrutException {
|
||||||
if (! aaptPath.isEmpty()) {
|
if (!aaptPath.isEmpty()) {
|
||||||
File aaptFile = new File(aaptPath);
|
File aaptFile = new File(aaptPath);
|
||||||
if (aaptFile.canRead() && aaptFile.exists()) {
|
if (aaptFile.canRead() && aaptFile.exists()) {
|
||||||
aaptFile.setExecutable(true);
|
aaptFile.setExecutable(true);
|
||||||
@ -115,4 +108,14 @@ public class AaptManager {
|
|||||||
|
|
||||||
return getAppVersionFromString(version);
|
return getAppVersionFromString(version);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public File getAapt2() throws BrutException {
|
||||||
|
return getAapt(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public File getAapt1() throws BrutException {
|
||||||
|
return getAapt(1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
12
brut.j.util/src/main/java/brut/util/AaptProvider.java
Normal file
12
brut.j.util/src/main/java/brut/util/AaptProvider.java
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
package brut.util;
|
||||||
|
|
||||||
|
import brut.common.BrutException;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
|
||||||
|
public interface AaptProvider {
|
||||||
|
File getAapt2() throws BrutException;
|
||||||
|
default File getAapt1() throws BrutException {
|
||||||
|
throw new BrutException(new UnsupportedOperationException("Aapt1 is not supported on this device"));
|
||||||
|
};
|
||||||
|
}
|
@ -20,6 +20,7 @@ import brut.common.BrutException;
|
|||||||
import org.apache.commons.io.IOUtils;
|
import org.apache.commons.io.IOUtils;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
|
import java.nio.file.Files;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.concurrent.ThreadLocalRandom;
|
import java.util.concurrent.ThreadLocalRandom;
|
||||||
@ -51,7 +52,7 @@ public abstract class Jar {
|
|||||||
File fileOut = File.createTempFile(tmpPrefix, suffix + ".tmp");
|
File fileOut = File.createTempFile(tmpPrefix, suffix + ".tmp");
|
||||||
fileOut.deleteOnExit();
|
fileOut.deleteOnExit();
|
||||||
|
|
||||||
OutputStream out = new FileOutputStream(fileOut);
|
OutputStream out = Files.newOutputStream(fileOut.toPath());
|
||||||
IOUtils.copy(in, out);
|
IOUtils.copy(in, out);
|
||||||
in.close();
|
in.close();
|
||||||
out.close();
|
out.close();
|
||||||
|
Loading…
Reference in New Issue
Block a user