Skip to content

Commit c3df207

Browse files
committed
解决本地升级因路径导致安装失败问题
1 parent b8ec825 commit c3df207

File tree

1 file changed

+97
-41
lines changed

1 file changed

+97
-41
lines changed

app/src/main/java/com/ayst/romupgrade/service/UpdateService.java

Lines changed: 97 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -120,11 +120,11 @@ public class UpdateService extends Service {
120120

121121
/**
122122
* 本地升级配置文件名
123-
*
123+
* <p>
124124
* 在u盘{@link #LOCAL_UPDATE_PATH}路径下创建此配置文件,内容如下:
125-
*
126-
* #升级类型,1:推荐升级,2:静默升级
127-
* UPDATE_TYPE=2
125+
* <p>
126+
* #升级类型,1:推荐升级,2:静默升级
127+
* UPDATE_TYPE=2
128128
*/
129129
public static final String USB_CONFIG_FILENAME = "config.ini";
130130

@@ -141,6 +141,29 @@ public class UpdateService extends Service {
141141
public static final String DATA_ROOT = "/data/media/0";
142142
public static final String FLASH_ROOT = Environment.getExternalStorageDirectory().getAbsolutePath();
143143

144+
/**
145+
* 本地升级包检查内部路径(sdcard),只检查根目录
146+
* 例:/data/media/0/{@link LOCAL_UPDATE_PATH}
147+
* <p>
148+
* 不能使用AppUtils.getStorageList()获取的路径,否则在Recovery中无法找到文件
149+
*/
150+
private static final String[] INTERNAL_DIRS = {
151+
DATA_ROOT,
152+
FLASH_ROOT,
153+
"/mnt/external_sd"
154+
};
155+
156+
/**
157+
* 本地升级包检查外部路径(usb),检查二级子目录
158+
* 例:/mnt/media_rw/6ABF-0AD3/{@link LOCAL_UPDATE_PATH}
159+
* <p>
160+
* 不能使用AppUtils.getStorageList()获取的路径,否则在Recovery中无法找到文件
161+
*/
162+
private static final String[] EXTERNAL_DIRS = {
163+
"/mnt/usb_storage",
164+
"/mnt/media_rw"
165+
};
166+
144167
/**
145168
* 保存系统升级状态文件
146169
*/
@@ -168,6 +191,7 @@ public class UpdateService extends Service {
168191
private DownloadAdapter mDownloadAdapter;
169192

170193
private int mLocalPackageIndex = 0;
194+
private int mLocalUpdateType = UPDATE_TYPE_RECOMMEND;
171195
private List<LocalPackage> mLocalPackages = new ArrayList<>();
172196

173197
private HashMap<String, InstallProgress> mInstallProgresses = new HashMap<>();
@@ -403,58 +427,90 @@ private void parseBaiduNewVersion(String jsonList) {
403427
* 应用升级包:exupdate 目录下的apk文件
404428
*/
405429
private void checkLocalUpdate() {
430+
mLocalUpdateType = UPDATE_TYPE_RECOMMEND;
406431
mLocalPackageIndex = 0;
407432
mLocalPackages.clear();
408433

409-
List<String> searchPaths = AppUtils.getStorageList(this);
410-
for (String dirPath : searchPaths) {
411-
Log.i(TAG, "checkLocalUpdate, search: " + dirPath);
412-
413-
int updateType = UPDATE_TYPE_RECOMMEND;
414-
File dir = new File(dirPath);
415-
for (File file : dir.listFiles()) {
416-
417-
if (file.isDirectory()) {
418-
if (TextUtils.equals(file.getName(), LOCAL_UPDATE_PATH)) {
419-
File[] files = file.listFiles(new FileFilter() {
420-
@Override
421-
public boolean accept(File tmpFile) {
422-
return (!tmpFile.isDirectory() && TextUtils.equals(
423-
FileUtils.getFileSuffix(tmpFile.getName()), "apk"));
424-
}
425-
});
426-
427-
for (File apkFile : files) {
428-
mLocalPackages.add(new LocalPackage(LocalPackage.TYPE_APP, apkFile));
429-
}
434+
for (String root : EXTERNAL_DIRS) {
435+
Log.i(TAG, "checkLocalUpdate, search external: " + root);
430436

431-
File configFile = new File(file, USB_CONFIG_FILENAME);
432-
if (configFile.exists()) {
433-
updateType = new UsbConfigManager(configFile).getUpdateType();
434-
}
437+
File rootDir = new File(root);
438+
if (null != rootDir.listFiles()) {
439+
for (File file : rootDir.listFiles()) {
440+
if (file.isDirectory()) {
441+
loadExupdate(new File(file, LOCAL_UPDATE_PATH));
442+
loadOtaPackage(file);
435443

436-
File otaFile = new File(file, ROM_OTA_PACKAGE_FILENAME);
437-
if (otaFile.exists()) {
438-
mLocalPackages.add(new LocalPackage(LocalPackage.TYPE_ROM, otaFile));
444+
if (!mLocalPackages.isEmpty()) {
445+
break;
439446
}
440447
}
441448
}
442449
}
450+
}
451+
452+
if (mLocalPackages.isEmpty()) {
453+
for (String root : INTERNAL_DIRS) {
454+
Log.i(TAG, "checkLocalUpdate, search internal: " + root);
455+
456+
File rootDir = new File(root);
457+
loadExupdate(new File(rootDir, LOCAL_UPDATE_PATH));
458+
loadOtaPackage(rootDir);
459+
460+
if (!mLocalPackages.isEmpty()) {
461+
break;
462+
}
463+
}
464+
}
465+
466+
if (!mLocalPackages.isEmpty()) {
467+
for (LocalPackage localPackage : mLocalPackages) {
468+
Log.i(TAG, "checkLocalUpdate, found: " + localPackage.toString());
469+
}
470+
471+
sWorkHandleLocked = true;
472+
if (UPDATE_TYPE_SILENT == mLocalUpdateType) {
473+
installLocalNext();
474+
} else {
475+
showNewVersion();
476+
}
477+
}
478+
}
443479

444-
if (!mLocalPackages.isEmpty()) {
445-
for (LocalPackage localPackage : mLocalPackages) {
446-
Log.i(TAG, "checkLocalUpdate, found: " + localPackage.toString());
480+
private boolean loadOtaPackage(File file) {
481+
if (null != file && file.exists() && file.isDirectory()) {
482+
File otaFile = new File(file, ROM_OTA_PACKAGE_FILENAME);
483+
if (otaFile.exists()) {
484+
mLocalPackages.add(new LocalPackage(LocalPackage.TYPE_ROM, otaFile));
485+
}
486+
}
487+
488+
return !mLocalPackages.isEmpty();
489+
}
490+
491+
private boolean loadExupdate(File file) {
492+
if (null != file && file.exists() && file.isDirectory()) {
493+
File[] files = file.listFiles(new FileFilter() {
494+
@Override
495+
public boolean accept(File tmpFile) {
496+
return (!tmpFile.isDirectory() && TextUtils.equals(
497+
FileUtils.getFileSuffix(tmpFile.getName()), "apk"));
447498
}
499+
});
448500

449-
sWorkHandleLocked = true;
450-
if (UPDATE_TYPE_SILENT == updateType) {
451-
installLocalNext();
452-
} else {
453-
showNewVersion();
501+
if (null != files) {
502+
for (File apkFile : files) {
503+
mLocalPackages.add(new LocalPackage(LocalPackage.TYPE_APP, apkFile));
454504
}
455-
break;
505+
}
506+
507+
File configFile = new File(file, USB_CONFIG_FILENAME);
508+
if (configFile.exists()) {
509+
mLocalUpdateType = new UsbConfigManager(configFile).getUpdateType();
456510
}
457511
}
512+
513+
return !mLocalPackages.isEmpty();
458514
}
459515

460516
/**

0 commit comments

Comments
 (0)