processAndroidCodeFileDirectory method
Future<void>
processAndroidCodeFileDirectory(
{ - required String currentDirPath,
- required String newPackage,
})
Implementation
Future<void> processAndroidCodeFileDirectory({
required String currentDirPath,
required String newPackage,
}) async {
if (newPackage.isEmpty) {
log('Android processAndroidCodeFileDirectory, newPackage: $newPackage is empty');
return;
}
final androidDir = Directory('$currentDirPath/android/app/src/main/');
final androidMainAllFile = listAllFiles(androidDir)
.where((element) => !element.contains('android/app/src/main/res/') && (element.endsWith('.java') || element.endsWith('.kt')))
.toList();
String mainActivityFilePath = '';
String mainActivityFileName = 'MainActivity';
String language = 'java';
for (String element in androidMainAllFile) {
String tmpFileName = p.basename(element);
if (tmpFileName.startsWith(mainActivityFileName)) {
mainActivityFilePath = element;
if (tmpFileName.endsWith("$mainActivityFileName.kt")) {
language = 'kotlin';
}
break;
}
}
if (language == 'java') {
mainActivityFileName += '.java';
} else if (language == 'kotlin') {
mainActivityFileName += '.kt';
}
if (mainActivityFilePath.isEmpty) {
log('Android not found MainActivity file path');
return;
}
String originalPackagePathString =
mainActivityFilePath.replaceAll('${androidDir.path}$language/', '').replaceAll('/$mainActivityFileName', '');
String newPakcagePathString = newPackage.split('.').join('/');
if (originalPackagePathString == newPakcagePathString) {
log('Android originalPackagePathString: $originalPackagePathString == newPakcagePathString: $newPakcagePathString');
return;
}
// 修改引入头
String originalPackageName = originalPackagePathString.split('/').join('.');
for (var element in androidMainAllFile) {
final fileType = await FileUtil.getFilePathEntityType(element);
if (fileType == FileSystemEntityType.file) {
final tmpFile = File(element);
String tmpFileContent = tmpFile.readAsStringSync();
if (tmpFileContent.contains(originalPackageName)) {
tmpFileContent = tmpFileContent.replaceAll("package $originalPackageName", 'package $newPackage');
tmpFile.writeAsStringSync(tmpFileContent);
}
}
}
final mainActivityFile = File(mainActivityFilePath);
final mainActivityParentDir = mainActivityFile.parent;
if (mainActivityParentDir.existsSync()) {
final newDirPath = '${androidDir.path}$language/$newPakcagePathString';
final newDir = Directory(newDirPath);
if (!newDir.existsSync()) {
newDir.createSync(recursive: true);
}
mainActivityParentDir.renameSync(newDirPath);
}
final needToDeleteDir = mainActivityParentDir.parent;
if (needToDeleteDir.existsSync()) {
needToDeleteDir.deleteSync();
} else {
log('Android needToDeleteDir.path --> ${needToDeleteDir.path} is not exist');
}
}