增加bdpatch
This commit is contained in:
@@ -3,6 +3,8 @@ 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;
|
||||
@@ -22,6 +24,7 @@ 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;
|
||||
@@ -66,7 +69,7 @@ public class MainActivity extends BaseMvvmActivity<MainViewModel, ActivityMainBi
|
||||
|
||||
//google play 更新
|
||||
// private AppUpdateManager mAppUpdateManager;
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public boolean setNightMode() {
|
||||
@@ -122,7 +125,7 @@ public class MainActivity extends BaseMvvmActivity<MainViewModel, ActivityMainBi
|
||||
// }
|
||||
// });
|
||||
|
||||
|
||||
mViewModel.patchAPK();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -383,7 +386,7 @@ public class MainActivity extends BaseMvvmActivity<MainViewModel, ActivityMainBi
|
||||
|
||||
private void readFileList() {
|
||||
Uri treeUri = Uri.parse(CommonConfig.MIR4_CONTENT_PATH);
|
||||
DocumentFile documentFile = DocumentFile.fromTreeUri(this, treeUri);
|
||||
DocumentFile documentFile = DocumentFile.fromTreeUri(this, treeUri);
|
||||
if (documentFile != null) {
|
||||
Log.e(TAG, "onActivityResult: canRead = " + documentFile.canRead());
|
||||
Log.e(TAG, "onActivityResult: " + Arrays.toString(documentFile.listFiles()));
|
||||
@@ -427,7 +430,7 @@ public class MainActivity extends BaseMvvmActivity<MainViewModel, ActivityMainBi
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
// 请求Android/data目录的权限,Android/obb目录则把data替换成obb即可。
|
||||
Uri treeUri = Uri.parse(CommonConfig.MIR4_CONTENT_PATH);
|
||||
DocumentFile documentFile = DocumentFile.fromTreeUri(this, treeUri);
|
||||
DocumentFile documentFile = DocumentFile.fromTreeUri(this, treeUri);
|
||||
if (documentFile != null) {
|
||||
if (documentFile.canRead()) {
|
||||
readFileList();
|
||||
@@ -446,7 +449,6 @@ public class MainActivity extends BaseMvvmActivity<MainViewModel, ActivityMainBi
|
||||
}
|
||||
|
||||
|
||||
|
||||
private void getLocationPermission() {
|
||||
XXPermissions.with(this)
|
||||
// 申请单个权限
|
||||
|
||||
@@ -1,11 +1,31 @@
|
||||
package com.example.mir4updater.activity.main;
|
||||
|
||||
import android.content.pm.ApplicationInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
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.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;
|
||||
import io.reactivex.rxjava3.core.Observable;
|
||||
import io.reactivex.rxjava3.core.ObservableEmitter;
|
||||
import io.reactivex.rxjava3.core.ObservableOnSubscribe;
|
||||
import io.reactivex.rxjava3.core.Observer;
|
||||
import io.reactivex.rxjava3.disposables.Disposable;
|
||||
import io.reactivex.rxjava3.schedulers.Schedulers;
|
||||
|
||||
public class MainViewModel extends BaseViewModel<ActivityMainBinding, ActivityEvent> {
|
||||
|
||||
private static final String TAG = "MainViewModel";
|
||||
|
||||
@Override
|
||||
public ActivityMainBinding getVDBinding() {
|
||||
return binding;
|
||||
@@ -15,4 +35,44 @@ public class MainViewModel extends BaseViewModel<ActivityMainBinding, ActivityEv
|
||||
public void onDestroy() {
|
||||
|
||||
}
|
||||
|
||||
public void patchAPK() {
|
||||
Observable.create(new ObservableOnSubscribe<Integer>() {
|
||||
@Override
|
||||
public void subscribe(@NonNull ObservableEmitter<Integer> emitter) throws Throwable {
|
||||
PackageManager pm = getCtx().getPackageManager();
|
||||
ApplicationInfo applicationInfo = pm.getApplicationInfo(CommonConfig.MIR4_PACKAGE_NAME, 0);
|
||||
String packageName = applicationInfo.packageName;
|
||||
String apkPath = applicationInfo.sourceDir; // APK 文件的完整路径
|
||||
Log.e("patchAPK", "mAppUpdateManager: Package: " + packageName + ", Path: " + apkPath);
|
||||
File file = new File("/sdcard");
|
||||
long time = System.currentTimeMillis();
|
||||
emitter.onNext(NativeUtil.patchAPK(apkPath, "/sdcard/mir4_update.xapk", "/sdcard/mir4.patch"));
|
||||
Log.e(TAG, "subscribe: " + (System.currentTimeMillis() - time) + "ms");
|
||||
emitter.onComplete();
|
||||
}
|
||||
}).subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(new Observer<Integer>() {
|
||||
@Override
|
||||
public void onSubscribe(@NonNull Disposable d) {
|
||||
Log.e("patchAPK", "onSubscribe: ");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNext(@NonNull Integer integer) {
|
||||
Log.e("patchAPK", "onNext: " + integer);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(@NonNull Throwable e) {
|
||||
Log.e("patchAPK", "onError: ");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onComplete() {
|
||||
Log.e("patchAPK", "onComplete: ");
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
package com.example.mir4updater.utils;
|
||||
|
||||
public class NativeUtil {
|
||||
static {
|
||||
System.loadLibrary("ttutils");
|
||||
}
|
||||
|
||||
/**
|
||||
* 合并APK文件
|
||||
* @param oldApkFile 旧APK文件路径
|
||||
* @param newApkFile 新APK文件路径(存储生成的APK的路径)
|
||||
* @param patchFile 差异文件
|
||||
*/
|
||||
public native static int patchAPK(String oldApkFile,String newApkFile,String patchFile);
|
||||
}
|
||||
Reference in New Issue
Block a user