diff --git a/app/build.gradle b/app/build.gradle index 1d4a68c..192fd61 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -21,7 +21,8 @@ android { testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - ndk { //可以根据需要来自行选择并添加对应cpu类型的.so库。 + ndk { + //可以根据需要来自行选择并添加对应cpu类型的.so库。 abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64' // 还可以添加 'armeabi', 'x86', 'x86_64', 'mips', 'mips64' } @@ -42,12 +43,6 @@ android { } } - externalNativeBuild { - cmake { - path file('CMakeLists.txt') - } - } - signingConfigs { own { storeFile file("keystore/ttstd.jks") @@ -120,6 +115,7 @@ android { dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation project(path: ':ttutils') implementation 'androidx.appcompat:appcompat:1.3.1' implementation 'androidx.constraintlayout:constraintlayout:2.0.4' diff --git a/app/src/main/java/com/example/mir4updater/activity/main/MainActivity.java b/app/src/main/java/com/example/mir4updater/activity/main/MainActivity.java index 3317262..866c1f3 100644 --- a/app/src/main/java/com/example/mir4updater/activity/main/MainActivity.java +++ b/app/src/main/java/com/example/mir4updater/activity/main/MainActivity.java @@ -2,9 +2,6 @@ package com.example.mir4updater.activity.main; import android.content.ContentResolver; import android.content.Intent; -import android.content.IntentSender; -import android.content.pm.ApplicationInfo; -import android.content.pm.PackageManager; import android.database.Cursor; import android.net.Uri; import android.os.Build; @@ -24,18 +21,8 @@ import com.example.mir4updater.bean.FileItem; import com.example.mir4updater.config.CommonConfig; import com.example.mir4updater.databinding.ActivityMainBinding; import com.example.mir4updater.utils.HashUtils; -import com.example.mir4updater.utils.NativeUtil; import com.example.mir4updater.utils.PermissionUtils; -import com.google.android.gms.tasks.OnFailureListener; -import com.google.android.gms.tasks.OnSuccessListener; -import com.google.android.gms.tasks.Task; -import com.google.android.play.core.appupdate.AppUpdateInfo; -import com.google.android.play.core.appupdate.AppUpdateManager; -import com.google.android.play.core.appupdate.AppUpdateManagerFactory; -import com.google.android.play.core.install.model.AppUpdateType; -import com.google.android.play.core.install.model.UpdateAvailability; import com.hjq.permissions.OnPermissionCallback; -import com.hjq.permissions.Permission; import com.hjq.permissions.XXPermissions; import com.hjq.toast.Toaster; import com.trello.rxlifecycle4.RxLifecycle; diff --git a/app/src/main/java/com/example/mir4updater/activity/main/MainViewModel.java b/app/src/main/java/com/example/mir4updater/activity/main/MainViewModel.java index 1ab0c2a..d10bdaa 100644 --- a/app/src/main/java/com/example/mir4updater/activity/main/MainViewModel.java +++ b/app/src/main/java/com/example/mir4updater/activity/main/MainViewModel.java @@ -7,11 +7,10 @@ import android.util.Log; import com.example.mir4updater.base.mvvm.BaseViewModel; import com.example.mir4updater.config.CommonConfig; import com.example.mir4updater.databinding.ActivityMainBinding; -import com.example.mir4updater.utils.NativeUtil; +import com.ttstd.ttutils.NativeUtil; import com.trello.rxlifecycle4.android.ActivityEvent; import java.io.File; -import java.util.Arrays; import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers; import io.reactivex.rxjava3.annotations.NonNull; @@ -47,7 +46,7 @@ public class MainViewModel extends BaseViewModelTesting documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); + + assertEquals("com.ttstd.ttutils.test", appContext.getPackageName()); + } +} diff --git a/ttutils/src/main/AndroidManifest.xml b/ttutils/src/main/AndroidManifest.xml new file mode 100644 index 0000000..58ccb7e --- /dev/null +++ b/ttutils/src/main/AndroidManifest.xml @@ -0,0 +1,2 @@ + diff --git a/app/src/main/java/com/example/mir4updater/utils/NativeUtil.java b/ttutils/src/main/java/com/ttstd/ttutils/NativeUtil.java similarity index 62% rename from app/src/main/java/com/example/mir4updater/utils/NativeUtil.java rename to ttutils/src/main/java/com/ttstd/ttutils/NativeUtil.java index ee6ae70..5bf6981 100644 --- a/app/src/main/java/com/example/mir4updater/utils/NativeUtil.java +++ b/ttutils/src/main/java/com/ttstd/ttutils/NativeUtil.java @@ -1,4 +1,4 @@ -package com.example.mir4updater.utils; +package com.ttstd.ttutils; public class NativeUtil { static { @@ -11,5 +11,6 @@ public class NativeUtil { * @param newApkFile 新APK文件路径(存储生成的APK的路径) * @param patchFile 差异文件 */ - public native static int patchAPK(String oldApkFile,String newApkFile,String patchFile); + public native static int patchApk(String oldApkFile,String newApkFile,String patchFile); + public native static int patchApkCpp(String oldApkFile,String newApkFile,String patchFile); } \ No newline at end of file diff --git a/app/src/main/jni/bsdiff.c b/ttutils/src/main/jni/bsdiff.c similarity index 100% rename from app/src/main/jni/bsdiff.c rename to ttutils/src/main/jni/bsdiff.c diff --git a/app/src/main/jni/bspatch.c b/ttutils/src/main/jni/bspatch.c similarity index 100% rename from app/src/main/jni/bspatch.c rename to ttutils/src/main/jni/bspatch.c diff --git a/app/src/main/jni/bzip/blocksort.c b/ttutils/src/main/jni/bzip/blocksort.c similarity index 100% rename from app/src/main/jni/bzip/blocksort.c rename to ttutils/src/main/jni/bzip/blocksort.c diff --git a/app/src/main/jni/bzip/bzlib.c b/ttutils/src/main/jni/bzip/bzlib.c similarity index 100% rename from app/src/main/jni/bzip/bzlib.c rename to ttutils/src/main/jni/bzip/bzlib.c diff --git a/app/src/main/jni/bzip/bzlib.h b/ttutils/src/main/jni/bzip/bzlib.h similarity index 100% rename from app/src/main/jni/bzip/bzlib.h rename to ttutils/src/main/jni/bzip/bzlib.h diff --git a/app/src/main/jni/bzip/bzlib_private.h b/ttutils/src/main/jni/bzip/bzlib_private.h similarity index 100% rename from app/src/main/jni/bzip/bzlib_private.h rename to ttutils/src/main/jni/bzip/bzlib_private.h diff --git a/app/src/main/jni/bzip/compress.c b/ttutils/src/main/jni/bzip/compress.c similarity index 100% rename from app/src/main/jni/bzip/compress.c rename to ttutils/src/main/jni/bzip/compress.c diff --git a/app/src/main/jni/bzip/crctable.c b/ttutils/src/main/jni/bzip/crctable.c similarity index 100% rename from app/src/main/jni/bzip/crctable.c rename to ttutils/src/main/jni/bzip/crctable.c diff --git a/app/src/main/jni/bzip/decompress.c b/ttutils/src/main/jni/bzip/decompress.c similarity index 100% rename from app/src/main/jni/bzip/decompress.c rename to ttutils/src/main/jni/bzip/decompress.c diff --git a/app/src/main/jni/bzip/huffman.c b/ttutils/src/main/jni/bzip/huffman.c similarity index 100% rename from app/src/main/jni/bzip/huffman.c rename to ttutils/src/main/jni/bzip/huffman.c diff --git a/app/src/main/jni/bzip/randtable.c b/ttutils/src/main/jni/bzip/randtable.c similarity index 100% rename from app/src/main/jni/bzip/randtable.c rename to ttutils/src/main/jni/bzip/randtable.c diff --git a/app/src/main/jni/ttutils.c b/ttutils/src/main/jni/ttutils.c similarity index 92% rename from app/src/main/jni/ttutils.c rename to ttutils/src/main/jni/ttutils.c index 1ecbf4a..f0201fc 100644 --- a/app/src/main/jni/ttutils.c +++ b/ttutils/src/main/jni/ttutils.c @@ -13,7 +13,7 @@ extern int bspatch_main(int argc, char *argv[]); JNIEXPORT jint JNICALL -Java_com_example_mir4updater_utils_NativeUtil_patchAPK(JNIEnv *env, jclass clazz, +Java_com_ttstd_ttutils_NativeUtil_patchApk(JNIEnv *env, jclass clazz, jstring old_path, jstring new_path, jstring patch_path) { LOGI("patchAPK"); const char *argv[4] = {"bspatch", @@ -27,4 +27,3 @@ Java_com_example_mir4updater_utils_NativeUtil_patchAPK(JNIEnv *env, jclass clazz (*env)->ReleaseStringUTFChars(env,patch_path, argv[3]); return result; } - diff --git a/ttutils/src/main/jni/ttutilscpp.cpp b/ttutils/src/main/jni/ttutilscpp.cpp new file mode 100644 index 0000000..51ed93e --- /dev/null +++ b/ttutils/src/main/jni/ttutilscpp.cpp @@ -0,0 +1,30 @@ +// +// Created by TT on 2025/4/9. +// +// 日志打印 +#include + +#define LOG_TAG "bspatch_jni" +#define LOGI(...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__) + +#include +#include +#include + +//extern "C" +//JNIEXPORT jint JNICALL +//Java_com_ttstd_ttutils_NativeUtil_patchApkCpp(JNIEnv *env, jclass clazz, +// jstring old_path, jstring new_path, +// jstring patch_path) { +// LOGI("patchAPK"); +// const char *argv[4] = {"bspatch", +// env->GetStringUTFChars(old_path, 0), +// env->GetStringUTFChars(new_path, 0), +// env->GetStringUTFChars(patch_path, 0)}; +// int result = bspatch_main(4, (char **) argv); // 调用修改后的函数 +// // 释放字符串资源 +// env->ReleaseStringUTFChars(old_path, argv[1]); +// env->ReleaseStringUTFChars(new_path, argv[2]); +// env->ReleaseStringUTFChars(patch_path, argv[3]); +// return result; +//} diff --git a/ttutils/src/test/java/com/ttstd/ttutils/ExampleUnitTest.java b/ttutils/src/test/java/com/ttstd/ttutils/ExampleUnitTest.java new file mode 100644 index 0000000..a87d2fd --- /dev/null +++ b/ttutils/src/test/java/com/ttstd/ttutils/ExampleUnitTest.java @@ -0,0 +1,17 @@ +package com.ttstd.ttutils; + +import org.junit.Test; + +import static org.junit.Assert.*; + +/** + * Example local unit test, which will execute on the development machine (host). + * + * @see Testing documentation + */ +public class ExampleUnitTest { + @Test + public void addition_isCorrect() { + assertEquals(4, 2 + 2); + } +} \ No newline at end of file