Skip to content

Commit

Permalink
2.1.5
Browse files Browse the repository at this point in the history
Updated REAndroid APKEditor and dependencies
Try to fix a bug with black theme on Android < 8
Try to fix a bug with saving without signing
Add option to force merge files with mismatched version code or package name
Changed the app icon
  • Loading branch information
AbdurazaaqMohammed committed Jan 24, 2025
1 parent 04170af commit 995cc9c
Show file tree
Hide file tree
Showing 1,714 changed files with 1,095 additions and 217,640 deletions.
5 changes: 3 additions & 2 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ android {
applicationId = "com.abdurazaaqmohammed.AntiSplit"
minSdk = 19
targetSdk = 35
versionCode = 42
versionName = "2.1.4"
versionCode = 43
versionName = "2.1.5"
multiDexEnabled = true
}

Expand All @@ -36,6 +36,7 @@ android {
dependencies {
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.1.2")
implementation("com.google.android.material:material:1.12.0")
implementation(files("libs/APKEditor.jar"))
}
dependenciesInfo {
// Disables dependency metadata when building APKs.
Expand Down
Binary file added app/libs/APKEditor.jar
Binary file not shown.
6 changes: 5 additions & 1 deletion app/proguard-rules.pro
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,11 @@
-dontwarn android.content.res.**
-dontwarn org.**

-keep class org.apache.commons.compress.** { *; }
-keep class org.apache.commons.compress.** { *; }
-keep class android.content.** { *; }
-keep class androidx.core.content.FileProvider { *; }
-keep class **.model.** { *; }
-keep class **.models.** { *; }
-keepnames class * { *; }
-keepnames interface * { *; }
-keepnames enum * { *; }
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@
</activity>
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="${applicationId}.provider"
android:authorities="com.abdurazaaqmohammed.AntiSplit.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
Expand Down
Binary file added app/src/main/ic_launcher-playstore.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added app/src/main/ic_launcher_gray-playstore.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

This file was deleted.

348 changes: 185 additions & 163 deletions app/src/main/java/com/abdurazaaqmohammed/AntiSplit/main/MainActivity.java

Large diffs are not rendered by default.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.abdurazaaqmohammed.AntiSplit.main;
package com.abdurazaaqmohammed.utils;

import android.content.Context;
import android.net.Uri;
Expand All @@ -9,8 +9,6 @@
import com.j256.simplezip.ZipFileInput;
import com.j256.simplezip.format.ZipFileHeader;
import com.reandroid.archive.ArchiveFile;
import com.reandroid.archive.InputSource;
import com.reandroid.archive.ZipEntryMap;
import com.starry.FileUtils;

import java.io.File;
Expand All @@ -19,8 +17,6 @@
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.function.Consumer;


public class DeviceSpecsUtil {

Expand Down Expand Up @@ -60,13 +56,13 @@ public List<String> getListOfSplits(Uri splitAPKUri) throws IOException {
}
} catch (Exception e) {
try(InputStream is = context.getContentResolver().openInputStream(splitAPKUri)) {
FileUtils.copyFile(is, file = new File(context.getCacheDir(), file.getName()));
com.abdurazaaqmohammed.utils.FileUtils.copyFile(is, file = new File(context.getCacheDir(), file.getName()));
return getListOfSplitsFromFile(file);
}
}
if(splits.size() > 1) return splits;
try(InputStream is = context.getContentResolver().openInputStream(splitAPKUri)) {
FileUtils.copyFile(is, file = new File(context.getCacheDir(), file.getName()));
com.abdurazaaqmohammed.utils.FileUtils.copyFile(is, file = new File(context.getCacheDir(), file.getName()));
return getListOfSplitsFromFile(file);
}
}
Expand Down
86 changes: 86 additions & 0 deletions app/src/main/java/com/abdurazaaqmohammed/utils/FileUtils.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
package com.abdurazaaqmohammed.utils;


import android.content.Context;

import org.apache.commons.io.FilenameUtils;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class FileUtils {

public static File copyFileFromAssetsAndGetFile(String fileName, Context context) throws IOException {
File destinationFile = new File(context.getFilesDir(), fileName);
if(!destinationFile.exists()) try(InputStream is = context.getAssets().open(fileName)) {
copyFile(is, destinationFile);
}
return destinationFile;
}

public static File getUnusedFile(File file) {
int i = 0;
while(file.exists()) {
i++;
String fileName = file.getName();
String extension = FilenameUtils.getExtension(fileName);
file = new File(file.getParentFile(), fileName.replace(extension, "").replaceFirst("_\\d+$", "") + '_' + i + '.' + extension);
}
return file;
}

public static File getUnusedFile(String file) {
return getUnusedFile(new File(file));
}

public static OutputStream getOutputStream(String filepath) throws IOException {
return getOutputStream(new File(filepath));
}

public static void copyFile(File sourceFile, File destinationFile) throws IOException {
try (InputStream is = getInputStream(sourceFile);
OutputStream os = getOutputStream(destinationFile)) {
copyFile(is, os);
}
}

public static void copyFile(InputStream is, OutputStream os) throws IOException {
if(LegacyUtils.supportsWriteExternalStorage) {
byte[] buffer = new byte[1024];
int length;
while ((length = is.read(buffer)) > 0) os.write(buffer, 0, length);
} else android.os.FileUtils.copy(is, os);
}

public static InputStream getInputStream(File file) throws IOException {
return LegacyUtils.supportsFileChannel ?
StreamBackups.getInputStream(file)
: new FileInputStream(file);
}

public static InputStream getInputStream(String filePath) throws IOException {
return getInputStream(new File(filePath));
}

public static void copyFile(InputStream is, File destinationFile) throws IOException {
try (OutputStream os = getOutputStream(destinationFile)) {
copyFile(is, os);
}
}

public static void copyFile(File in, OutputStream os) throws IOException {
try(InputStream is = getInputStream(in)) {
copyFile(is, os);
}
}

public static OutputStream getOutputStream(File file) throws IOException {
return LegacyUtils.supportsFileChannel ?
StreamBackups.getOutputStream(file)
: new FileOutputStream(file);
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.abdurazaaqmohammed.AntiSplit.main;
package com.abdurazaaqmohammed.utils;

import android.os.Build;

Expand Down
60 changes: 60 additions & 0 deletions app/src/main/java/com/abdurazaaqmohammed/utils/RunUtil.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
package com.abdurazaaqmohammed.utils;


import android.os.Handler;
import android.text.TextUtils;
import android.widget.Toast;

import com.abdurazaaqmohammed.AntiSplit.main.MainActivity;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

public class RunUtil {

private final Handler handler;
private final MainActivity context;
private final CharSequence msg;

public RunUtil(MainActivity context) {
this(null, context, null);
}

public RunUtil(Handler handler, MainActivity context, CharSequence msg) {
this.handler = handler;
this.context = context;
this.msg = msg;
}

public void runInBackground(Callable<Boolean> callable) {
ExecutorService executor = Executors.newSingleThreadExecutor();
Future<Boolean> future = executor.submit(callable);

executor.submit(() -> {
try {
Boolean success = future.get();

if (success && handler != null && !TextUtils.isEmpty(msg))
handler.post(() -> Toast.makeText(context, msg, Toast.LENGTH_SHORT).show());
} catch (Exception e) {
(context).showError(e);
}
});
}

public void runInBackground(Callable<Boolean> callable, Runnable doAfter, boolean onlyIfSuccessful) {
ExecutorService executor = Executors.newSingleThreadExecutor();
Future<Boolean> future = executor.submit(callable);

executor.submit(() -> {
try {
if (future.get() && handler != null) handler.post(doAfter);
} catch (Exception e) {
if (!onlyIfSuccessful && handler != null) handler.post(doAfter);
(context).showError(e);
}
});
}
}
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
package com.abdurazaaqmohammed.AntiSplit.main;
package com.abdurazaaqmohammed.utils;

import android.content.Context;
import android.net.Uri;
import android.os.Build;

import com.abdurazaaqmohammed.AntiSplit.R;
import com.abdurazaaqmohammed.AntiSplit.main.MainActivity;
import com.aefyr.pseudoapksigner.IOUtils;
import com.aefyr.pseudoapksigner.PseudoApkSigner;
import com.android.apksig.ApkSigner;
import com.android.apksig.apk.ApkFormatException;
import com.reandroid.apkeditor.merge.LogUtil;
import com.starry.FileUtils;


Expand Down Expand Up @@ -64,7 +64,7 @@ public static void signPseudoApkSigner(File temp, Context context, Uri out, Exce
if(Build.VERSION.SDK_INT < 30) {
// When I tried signing with apksig in AVD with sdk 10 java.security is throwing some error saying something not found
// Apparently 11 is the last version that supports v1 signing alone.
try (InputStream is = FileUtils.getInputStream(temp)) {
try (InputStream is = com.abdurazaaqmohammed.utils.FileUtils.getInputStream(temp)) {
final String FILE_NAME_PAST = "testkey.past";
final String FILE_NAME_PRIVATE_KEY = "testkey.pk8";
File signingEnvironment = new File(context.getFilesDir(), "signing");
Expand All @@ -81,16 +81,16 @@ public static void signPseudoApkSigner(File temp, Context context, Uri out, Exce
PseudoApkSigner.sign(is, os, pastFile, privateKeyFile);
}
} catch (Exception e2) {
LogUtil.logMessage(msg);
MainActivity.logger.logMessage(msg);
try(OutputStream os = FileUtils.getOutputStream(out, context)) {
FileUtils.copyFile(temp, os);
com.abdurazaaqmohammed.utils.FileUtils.copyFile(temp, os);
}
throw(new RuntimeException(msg, e)); // for showError
}
} else {
LogUtil.logMessage(msg);
MainActivity.logger.logMessage(msg);
try(OutputStream os = FileUtils.getOutputStream(out, context)) {
FileUtils.copyFile(temp, os);
com.abdurazaaqmohammed.utils.FileUtils.copyFile(temp, os);
}
throw(new RuntimeException(msg, e)); // for showError
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.starry;
package com.abdurazaaqmohammed.utils;

import android.annotation.TargetApi;

Expand All @@ -12,7 +12,7 @@
import java.nio.file.StandardOpenOption;

@TargetApi(26)
public class StupidOS {
public class StreamBackups {
public static OutputStream getOutputStream(File file) throws IOException {
try {
return Files.newOutputStream(file.toPath(), java.nio.file.StandardOpenOption.CREATE, StandardOpenOption.WRITE, StandardOpenOption.TRUNCATE_EXISTING);
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/java/com/aefyr/pseudoapksigner/IOUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

import android.content.Context;

import com.starry.FileUtils;
import com.abdurazaaqmohammed.utils.FileUtils;

import java.io.File;
import java.io.IOException;
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/java/com/aefyr/pseudoapksigner/Utils.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.aefyr.pseudoapksigner;

import com.starry.FileUtils;
import com.abdurazaaqmohammed.utils.FileUtils;

import java.io.File;
import java.io.IOException;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import static com.android.apksig.internal.apk.v2.V2SchemeConstants.APK_SIGNATURE_SCHEME_V2_BLOCK_ID;
import static com.android.apksig.internal.apk.v3.V3SchemeConstants.APK_SIGNATURE_SCHEME_V3_BLOCK_ID;

import com.abdurazaaqmohammed.utils.FileUtils;
import com.android.apksig.apk.ApkUtils;
import com.android.apksig.internal.apk.ApkSigningBlockUtils;
import com.android.apksig.internal.apk.ContentDigestAlgorithm;
Expand All @@ -32,7 +33,6 @@
import com.android.apksig.internal.util.Pair;
import com.android.apksig.util.DataSource;
import com.android.apksig.zip.ZipFormatException;
import com.starry.FileUtils;

import java.io.File;
import java.io.IOException;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@

import static com.android.apksig.internal.apk.ApkSigningBlockUtils.toHex;

import com.abdurazaaqmohammed.utils.FileUtils;
import com.android.apksig.ApkVerifier;
import com.android.apksig.ApkVerifier.Issue;
import com.android.apksig.internal.apk.ApkSigningBlockUtils;
Expand All @@ -26,10 +27,8 @@
import com.android.apksig.internal.util.GuaranteedEncodedFormX509Certificate;
import com.android.apksig.internal.util.X509CertificateUtils;
import com.android.apksig.util.DataSource;
import com.starry.FileUtils;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.security.InvalidAlgorithmParameterException;
Expand Down
Loading

0 comments on commit 995cc9c

Please sign in to comment.