HarmonyOS 鸿蒙Next hap生成修改内容分享
HarmonyOS 鸿蒙Next hap生成修改内容分享
-
目标,修改配置文件
-
命令打包hap hvigorw assembleHap 或者 .\hvigorw assembleHap
-
获得生成的hap包
我的实现是:先获取系统时间,然后把versionName改成系统时间,在进行编译成为hap包,把hap包cp重命名出来,需要修改其他东西也是类似
代码:工具代码只能参考,assembleHap.bat 必须在工程根目录,里面内容位.\hvigorw assembleHap 需要自己创建
import com.jayway.jsonpath.DocumentContext;
import com.jayway.jsonpath.JsonPath;
import java.text.SimpleDateFormat;
import java.util.Calendar;
public class Main {
public static void main(String[] args) throws Exception {
String versionName = generateVersionName();
String appJson5Path = "AppScope/app.json5";
//第一步:修改appJson5文件中的versionName
//将Json文件读取为字符串
String jsonStr = FileUtils.readFile(appJson5Path);
//修改Json的value
DocumentContext context = JsonPath.parse(jsonStr);
JsonPath path = JsonPath.compile("$.app.versionName");
context.set(path, versionName);
String changedJson = context.jsonString();
//将json字符串格式化 并写入制定文件
FileUtils.writeFile(appJson5Path, FormatJsonUtlis.formatJson(changedJson));
//第二步:编译
// Process process = new ProcessBuilder(".\\hvigorw assembleHap").start();
String command = "assembleHap.bat";
Process process = Runtime.getRuntime().exec(command);
// 等待命令执行完成
int exitCode = process.waitFor();
System.out.println("Exit code: " + exitCode);
//第三步:将打包文件重命名
String oldPath = "entry/build/default/outputs/default/entry-default-signed.hap";
String newPath = "entry/build/default/outputs/default/" + versionName + ".hap";
FileUtils.copyFile(oldPath, newPath);
}
private static String generateVersionName() {
String name = ".V1.0.0.0-";
Calendar calendar = Calendar.getInstance();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd.hhmmss");
String versionName = name + dateFormat.format(calendar.getTime());
return versionName;
}
}
import java.io.*;
public class FileUtils {
public static String readFile(String path){
// 读取文件数据
StringBuffer strbuffer = new StringBuffer();
File myFile = new File(path);
if (!myFile.exists()) {
System.err.println("Can't Find " + path);
} try {
FileInputStream fis = new FileInputStream(path);
InputStreamReader inputStreamReader = new InputStreamReader(fis, "UTF-8");
BufferedReader in = new BufferedReader(inputStreamReader);
String str;
while ((str = in.readLine()) != null) {
strbuffer.append(str); //new String(str,"UTF-8")
} in.close();
} catch (IOException e) {
e.getStackTrace();
}
return strbuffer.toString();
}
public static boolean writeFile(String filePath, String content) {
FileWriter fw;
try {
fw = new FileWriter(filePath);
PrintWriter out = new PrintWriter(fw);
out.write(content);
out.println();
fw.close();
out.close();
return true;
} catch (IOException e) {
e.printStackTrace();
return false;
}
}
public static void copyFile(String oldPath,String newPath) throws Exception{
File result = new File(newPath);
if (!result.getParentFile().exists()){
result.getParentFile().mkdirs();
}
FileInputStream input = new FileInputStream(oldPath);
FileOutputStream out = new FileOutputStream(result);
byte[] buffer = new byte[1000];
int hasRead = 0;
while ((hasRead = input.read(buffer)) > 0) {
//0:表示每次从0开始
out.write(buffer, 0, hasRead);
}
System.out.println(result.getAbsolutePath());
input.close();
out.close();
}
}
public class FormatJsonUtlis {
/**
* 格式化
*/
public static String formatJson(String jsonStr) {
if (null == jsonStr || "".equals(jsonStr))
return "";
StringBuilder sb = new StringBuilder();
char last = '\0';
char current = '\0';
int indent = 0;
boolean isInQuotationMarks = false;
for (int i = 0; i < jsonStr.length(); i++) {
last = current;
current = jsonStr.charAt(i);
switch (current) {
case '"':
if (last != '\\'){
isInQuotationMarks = !isInQuotationMarks;
}
sb.append(current);
break;
case '{':
case '[':
sb.append(current);
if (!isInQuotationMarks) {
sb.append('\n');
indent++;
addIndentBlank(sb, indent);
} break;
case '}':
case ']':
if (!isInQuotationMarks) {
sb.append('\n');
indent--;
addIndentBlank(sb, indent);
}
sb.append(current);
break;
case ',':
sb.append(current);
if (last != '\\' && !isInQuotationMarks) {
sb.append('\n');
addIndentBlank(sb, indent);
}
break;
default:
sb.append(current);
}
}
return sb.toString();
}
private static void addIndentBlank(StringBuilder sb, int indent) {
for (int i = 0; i < indent; i++) {
sb.append('\t');
}
}
}
更多关于HarmonyOS 鸿蒙Next hap生成修改内容分享的实战教程也可以访问 https://www.itying.com/category-93-b0.html
1 回复