mirror of
https://github.com/revanced/Apktool.git
synced 2024-12-04 10:02:55 +01:00
Merge branch 'master' into gradle7
# Conflicts: # build.gradle
This commit is contained in:
commit
d65c88a447
35
.github/workflows/build.yml
vendored
Normal file
35
.github/workflows/build.yml
vendored
Normal file
@ -0,0 +1,35 @@
|
||||
name: Build
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
name: Build apktool.jar
|
||||
|
||||
steps:
|
||||
- uses: actions/cache@v2
|
||||
with:
|
||||
path: |
|
||||
~/.gradle/caches
|
||||
~/.gradle/wrapper
|
||||
key: ${{ runner.os }}-gradle-${{ matrix.java }}-${{ hashFiles('**/*.gradle*') }}
|
||||
restore-keys: ${{ runner.os }}-${{ matrix.java }}-gradle-
|
||||
|
||||
- uses: actions/checkout@v2
|
||||
|
||||
- name: Set up JDK 10
|
||||
uses: actions/setup-java@v1
|
||||
with:
|
||||
java-version: 10
|
||||
|
||||
- name: Build
|
||||
run: ./gradlew build shadowJar proguard
|
||||
|
||||
- name: Upload
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: apktool.jar
|
||||
path: brut.apktool/apktool-cli/build/libs/apktool-*-small.jar
|
16
.github/workflows/test.yml
vendored
16
.github/workflows/test.yml
vendored
@ -15,6 +15,7 @@ on:
|
||||
|
||||
jobs:
|
||||
build-and-test-with-Java-8-and-later:
|
||||
runs-on: ${{ matrix.os }}
|
||||
name: Build/Test (JDK ${{ matrix.java }}, ${{ matrix.os }})
|
||||
strategy:
|
||||
fail-fast: false
|
||||
@ -22,24 +23,27 @@ jobs:
|
||||
matrix:
|
||||
os: [ubuntu-latest, macOS-latest, windows-latest]
|
||||
java: [8, 9, 10, 11, 12, 13, 14]
|
||||
runs-on: ${{ matrix.os }}
|
||||
|
||||
steps:
|
||||
- uses: actions/cache@v2
|
||||
with:
|
||||
path: |
|
||||
~/.gradle/caches
|
||||
~/.gradle/wrapper
|
||||
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-gradle-
|
||||
key: ${{ runner.os }}-gradle-${{ matrix.java }}-${{ hashFiles('**/*.gradle*') }}
|
||||
restore-keys: ${{ runner.os }}-${{ matrix.java }}-gradle-
|
||||
|
||||
- uses: actions/checkout@v2
|
||||
|
||||
- name: Set up JDK ${{ matrix.java }}
|
||||
uses: actions/setup-java@v1
|
||||
with:
|
||||
java-version: ${{ matrix.java }}
|
||||
|
||||
- name: Build and test
|
||||
run: ./gradlew.bat build shadowJar proguard
|
||||
if: startsWith(matrix.os, 'windows') == true
|
||||
run: ./gradlew.bat build shadowJar proguard
|
||||
|
||||
- name: Build and test
|
||||
if: startsWith(matrix.os, 'windows') != true
|
||||
run: ./gradlew build shadowJar proguard
|
||||
if: startsWith(matrix.os, 'windows') != true
|
@ -11,7 +11,7 @@ It is NOT intended for piracy and other non-legal uses. It could be used for loc
|
||||
|
||||
#### Support
|
||||
- [Project Page](https://ibotpeaches.github.io/Apktool/)
|
||||
- [#apktool on freenode](http://webchat.freenode.net/?channels=apktool)
|
||||
- [#apktool on libera.chat](https://web.libera.chat/)
|
||||
|
||||
#### Sponsored by
|
||||
|
||||
@ -32,7 +32,7 @@ If you discover a security vulnerability within Apktool, please send an e-mail t
|
||||
- [Documentation](https://ibotpeaches.github.io/Apktool/documentation/)
|
||||
- [Bug Reports](https://github.com/iBotPeaches/Apktool/issues)
|
||||
- [Chat on Gitter](https://gitter.im/iBotPeaches/Apktool)
|
||||
- [Changelog/Information](http://ibotpeaches.github.io/Apktool/changes/)
|
||||
- [Changelog/Information](https://ibotpeaches.github.io/Apktool/changes/)
|
||||
- [XDA Post](https://forum.xda-developers.com/t/util-dec-2-2020-apktool-tool-for-reverse-engineering-apk-files.1755243/)
|
||||
- [Source (Github)](https://github.com/iBotPeaches/Apktool)
|
||||
- [Source (Bitbucket)](https://bitbucket.org/iBotPeaches/apktool/)
|
||||
|
@ -28,14 +28,12 @@ processResources {
|
||||
include '**/*.jar'
|
||||
duplicatesStrategy = DuplicatesStrategy.INCLUDE
|
||||
}
|
||||
|
||||
|
||||
includeEmptyDirs = false
|
||||
}
|
||||
|
||||
dependencies {
|
||||
testImplementation("junit:junit:4.10") {
|
||||
exclude(module: 'hamcrest-core')
|
||||
}
|
||||
testImplementation depends.junit
|
||||
|
||||
api project(':brut.j.dir'),
|
||||
project(':brut.j.util'),
|
||||
@ -50,4 +48,4 @@ dependencies {
|
||||
depends.commons_io
|
||||
|
||||
testImplementation depends.xmlunit
|
||||
}
|
||||
}
|
||||
|
@ -27,5 +27,10 @@ public class CantFindFrameworkResException extends AndrolibException {
|
||||
return mPkgId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getMessage() {
|
||||
return String.format("Can't find framework resources for package of id: %d", this.getPkgId());
|
||||
}
|
||||
|
||||
private final int mPkgId;
|
||||
}
|
||||
|
Binary file not shown.
@ -31,9 +31,8 @@ import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.custommonkey.xmlunit.XMLAssert.assertXMLEqual;
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
public class BaseTest {
|
||||
|
||||
@ -45,16 +44,16 @@ public class BaseTest {
|
||||
|
||||
Map<String, String> controlFiles = control.unknownFiles;
|
||||
Map<String, String> testFiles = test.unknownFiles;
|
||||
assertTrue(controlFiles.size() == testFiles.size());
|
||||
assertEquals(controlFiles.size(), testFiles.size());
|
||||
|
||||
// Make sure that the compression methods are still the same
|
||||
for (Map.Entry<String, String> controlEntry : controlFiles.entrySet()) {
|
||||
assertTrue(controlEntry.getValue().equals(testFiles.get(controlEntry.getKey())));
|
||||
assertEquals(controlEntry.getValue(), testFiles.get(controlEntry.getKey()));
|
||||
}
|
||||
}
|
||||
|
||||
protected void compareBinaryFolder(String path, boolean res) throws BrutException, IOException {
|
||||
Boolean exists = true;
|
||||
boolean exists = true;
|
||||
|
||||
String prefixPath = "";
|
||||
if (res) {
|
||||
|
@ -495,7 +495,7 @@ public class BuildAndDecodeTest extends BaseTest {
|
||||
MetaInfo metaInfo = new Androlib().readMetaFile(sTestNewDir);
|
||||
|
||||
for (String item : metaInfo.doNotCompress) {
|
||||
assertFalse(item.equals("jpg"));
|
||||
assertNotEquals("jpg", item);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -29,6 +29,7 @@ import org.junit.Test;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
public class Empty9PatchTest extends BaseTest {
|
||||
@ -58,6 +59,6 @@ public class Empty9PatchTest extends BaseTest {
|
||||
|
||||
File aPng = new File(sTestOrigDir,"res/drawable-xhdpi/empty.9.png");
|
||||
assertTrue(aPng.isFile());
|
||||
assertTrue(aPng.length() == 0);
|
||||
assertEquals(0, aPng.length());
|
||||
}
|
||||
}
|
@ -30,12 +30,11 @@ import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.Arrays;
|
||||
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
public class ForceManifestDecodeNoResourcesTest extends BaseTest {
|
||||
|
||||
private byte[] xmlHeader = new byte[] {
|
||||
private final byte[] xmlHeader = new byte[] {
|
||||
0x3C, // <
|
||||
0x3F, // ?
|
||||
0x78, // x
|
||||
@ -68,7 +67,7 @@ public class ForceManifestDecodeNoResourcesTest extends BaseTest {
|
||||
// lets probe filetype of manifest, we should detect XML
|
||||
File manifestFile = new File(output + File.separator + "AndroidManifest.xml");
|
||||
byte[] magic = TestUtils.readHeaderOfFile(manifestFile, 6);
|
||||
assertTrue(Arrays.equals(this.xmlHeader, magic));
|
||||
assertArrayEquals(this.xmlHeader, magic);
|
||||
|
||||
// confirm resources.arsc still exists, as its raw
|
||||
File resourcesArsc = new File(output + File.separator + "resources.arsc");
|
||||
@ -87,7 +86,7 @@ public class ForceManifestDecodeNoResourcesTest extends BaseTest {
|
||||
// lets probe filetype of manifest, we should detect XML
|
||||
File manifestFile = new File(output + File.separator + "AndroidManifest.xml");
|
||||
byte[] magic = TestUtils.readHeaderOfFile(manifestFile, 6);
|
||||
assertTrue(Arrays.equals(this.xmlHeader, magic));
|
||||
assertArrayEquals(this.xmlHeader, magic);
|
||||
|
||||
// confirm resources.arsc does not exist
|
||||
File resourcesArsc = new File(output + File.separator + "resources.arsc");
|
||||
@ -106,7 +105,7 @@ public class ForceManifestDecodeNoResourcesTest extends BaseTest {
|
||||
// lets probe filetype of manifest, we should detect XML
|
||||
File manifestFile = new File(output + File.separator + "AndroidManifest.xml");
|
||||
byte[] magic = TestUtils.readHeaderOfFile(manifestFile, 6);
|
||||
assertTrue(Arrays.equals(this.xmlHeader, magic));
|
||||
assertArrayEquals(this.xmlHeader, magic);
|
||||
|
||||
// confirm resources.arsc does not exist
|
||||
File resourcesArsc = new File(output + File.separator + "resources.arsc");
|
||||
|
@ -21,8 +21,8 @@ import brut.androlib.ApkDecoder;
|
||||
import brut.androlib.BaseTest;
|
||||
import brut.androlib.TestUtils;
|
||||
import brut.androlib.meta.MetaInfo;
|
||||
import brut.directory.ExtFile;
|
||||
import brut.common.BrutException;
|
||||
import brut.directory.ExtFile;
|
||||
import brut.util.OS;
|
||||
import org.junit.AfterClass;
|
||||
import org.junit.BeforeClass;
|
||||
@ -31,7 +31,7 @@ import org.junit.Test;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNull;
|
||||
|
||||
public class MissingVersionManifestTest extends BaseTest {
|
||||
|
||||
@ -58,6 +58,6 @@ public class MissingVersionManifestTest extends BaseTest {
|
||||
apkDecoder.decode();
|
||||
|
||||
MetaInfo metaInfo = new Androlib().readMetaFile(decodedApk);
|
||||
assertEquals(null, metaInfo.versionInfo.versionName);
|
||||
assertNull(metaInfo.versionInfo.versionName);
|
||||
}
|
||||
}
|
66
build.gradle
66
build.gradle
@ -16,12 +16,31 @@ import java.nio.charset.StandardCharsets
|
||||
* limitations under the License.
|
||||
*/
|
||||
buildscript {
|
||||
ext {
|
||||
year = '2010'
|
||||
brut = 'Ryszard Wiśniewski'
|
||||
brutEmail = 'brut.alll@gmail.com'
|
||||
ibot = 'Connor Tumbleson'
|
||||
ibotEmail = 'connor.tumbleson@gmail.com'
|
||||
|
||||
depends = [
|
||||
baksmali : 'org.smali:baksmali:2.5.2',
|
||||
commons_cli : 'commons-cli:commons-cli:1.4',
|
||||
commons_io : 'commons-io:commons-io:2.8.0',
|
||||
commons_lang : 'org.apache.commons:commons-lang3:3.12.0',
|
||||
guava : 'com.google.guava:guava:30.1.1-jre',
|
||||
junit : 'junit:junit:4.13.2',
|
||||
proguard_gradle: 'com.guardsquare:proguard-gradle:7.0.1',
|
||||
snakeyaml : 'org.yaml:snakeyaml:1.28:android',
|
||||
smali : 'org.smali:smali:2.5.2',
|
||||
xmlpull : 'xpp3:xpp3:1.1.4c',
|
||||
xmlunit : 'xmlunit:xmlunit:1.6',
|
||||
]
|
||||
}
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
}
|
||||
tasks.withType(JavaCompile) {
|
||||
options.encoding = StandardCharsets.UTF_8.toString()
|
||||
}
|
||||
dependencies {
|
||||
classpath 'com.github.jengelman.gradle.plugins:shadow:6.1.0'
|
||||
}
|
||||
@ -53,21 +72,18 @@ allprojects {
|
||||
java = 'SLASHSTAR_STYLE'
|
||||
}
|
||||
strictCheck true
|
||||
|
||||
ext.year = '2010'
|
||||
ext.brut = 'Ryszard Wiśniewski'
|
||||
ext.brutEmail = 'brut.alll@gmail.com'
|
||||
ext.ibot = 'Connor Tumbleson'
|
||||
ext.ibotEmail = 'connor.tumbleson@gmail.com'
|
||||
}
|
||||
|
||||
tasks.withType(JavaCompile) {
|
||||
options.compilerArgs += ["-Xlint:-options"]
|
||||
}
|
||||
|
||||
// license plugin automatically fires these tasks, disable them and run them during releases
|
||||
gradle.startParameter.excludedTaskNames += "licenseMain"
|
||||
gradle.startParameter.excludedTaskNames += "licenseTest"
|
||||
gradle.startParameter.excludedTaskNames += [
|
||||
"licenseMain",
|
||||
"licenseTest"
|
||||
]
|
||||
}
|
||||
|
||||
tasks.withType(JavaCompile).configureEach {
|
||||
options.encoding = StandardCharsets.UTF_8.toString()
|
||||
options.compilerArgs += ["-Xlint:-options"]
|
||||
}
|
||||
|
||||
def mavenVersion = 'unspecified'
|
||||
@ -82,7 +98,7 @@ if (!('release' in gradle.startParameter.taskNames)) {
|
||||
project.ext.set("hash", hash)
|
||||
project.ext.set("apktool_version", version + "-" + hash + "-SNAPSHOT")
|
||||
mavenVersion = version + "-SNAPSHOT"
|
||||
println "Building SNAPSHOT (" + getCheckedOutBranch() + "): " + hash
|
||||
println "Building SNAPSHOT (${getCheckedOutBranch()}): $hash"
|
||||
}
|
||||
} else {
|
||||
project.ext.set("hash", "")
|
||||
@ -92,7 +108,7 @@ if (!('release' in gradle.startParameter.taskNames)) {
|
||||
project.ext.set("apktool_version", version)
|
||||
}
|
||||
mavenVersion = version
|
||||
println "Building RELEASE (" + getCheckedOutBranch() + "): " + project.ext.apktool_version
|
||||
println "Building RELEASE (${getCheckedOutBranch()}): $project.ext.apktool_version"
|
||||
}
|
||||
|
||||
build.doFirst {
|
||||
@ -119,22 +135,6 @@ task snapshot {
|
||||
subprojects {
|
||||
apply plugin: 'java'
|
||||
|
||||
ext {
|
||||
depends = [
|
||||
baksmali: 'org.smali:baksmali:2.5.2',
|
||||
commons_cli: 'commons-cli:commons-cli:1.4',
|
||||
commons_io: 'commons-io:commons-io:2.4',
|
||||
commons_lang: 'org.apache.commons:commons-lang3:3.12.0',
|
||||
guava: 'com.google.guava:guava:30.1.1-jre',
|
||||
junit: 'junit:junit:4.13.2',
|
||||
proguard_gradle: 'com.guardsquare:proguard-gradle:7.1.0-beta2',
|
||||
snakeyaml: 'org.yaml:snakeyaml:1.28:android',
|
||||
smali: 'org.smali:smali:2.5.2',
|
||||
xmlpull: 'xpp3:xpp3:1.1.4c',
|
||||
xmlunit: 'xmlunit:xmlunit:1.6',
|
||||
]
|
||||
}
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user