diff --git a/.changelog/lang_zh-Hans.json b/.changelog/lang_zh-Hans.json index 3c51a13a..fdab1932 100644 --- a/.changelog/lang_zh-Hans.json +++ b/.changelog/lang_zh-Hans.json @@ -64,6 +64,7 @@ "Android 10 UiObject#child 方法可能出现 ArrayIndexOutOfBoundsException 异常的问题 _[`issue #416`](http://issues.autojs6.com/416)_", "运行项目时 project.json 配置参数可能无法正常解析的问题", "项目打包时 project.json 的 excludedDirs 配置参数将导致配置文件解析失败的问题 _[`issue #428`](http://issues.autojs6.com/428)_", + "Android 7.x 可能无法正常使用打包功能的问题", "项目配置文件中构建版本号或构建时间出现较大数字时可能导致应用崩溃的问题", "频繁获取或重建 ImageReader 时可能因缓冲区暂无可用帧导致应用崩溃的问题", "输入事件观察器 InputEventObserver 可能导致应用启动时明显卡顿的问题", diff --git a/app/src/main/java/org/autojs/autojs/apkbuilder/ApkBuilder.kt b/app/src/main/java/org/autojs/autojs/apkbuilder/ApkBuilder.kt index b3ef484a..c52a86a9 100644 --- a/app/src/main/java/org/autojs/autojs/apkbuilder/ApkBuilder.kt +++ b/app/src/main/java/org/autojs/autojs/apkbuilder/ApkBuilder.kt @@ -9,7 +9,6 @@ import android.os.Build import android.util.Log import com.mcal.apksigner.ApkSigner import com.reandroid.arsc.chunk.TableBlock -import org.apache.commons.io.FileUtils import org.autojs.autojs.AbstractAutoJs.Companion.isInrt import org.autojs.autojs.apkbuilder.keystore.AESUtils import org.autojs.autojs.app.GlobalAppContext @@ -307,7 +306,16 @@ open class ApkBuilder(apkInputStream: InputStream?, private val outApkFile: File val defaultKeyStoreFile = File(buildPath, "default_key_store.bks") val tmpOutputApk = File(buildPath, "temp.apk") - FileUtils.copyInputStreamToFile(GlobalAppContext.get().assets.open("default_key_store.bks"), defaultKeyStoreFile) + + // Replace FileUtils.copyInputStreamToFile(...). + // zh-CN: 替换 FileUtils.copyInputStreamToFile(...). + defaultKeyStoreFile.parentFile?.let { if (!it.exists()) it.mkdirs() } + GlobalAppContext.get().assets.open("default_key_store.bks").use { input -> + FileOutputStream(defaultKeyStoreFile, false).use { output -> + input.copyTo(output, bufferSize = 16 * 1024) + output.fd.sync() + } + } val signer = ApkSigner(outApkFile, tmpOutputApk).apply { useDefaultSignatureVersion = false @@ -329,13 +337,15 @@ open class ApkBuilder(apkInputStream: InputStream?, private val outApkFile: File aliasPassword = AESUtils.decrypt(it.aliasPassword) } - // 使用 ApkSigner 重新签名 + // Re-sign using ApkSigner. + // zh-CN: 使用 ApkSigner 重新签名. if (!signer.signRelease(keyStoreFile, password, alias, aliasPassword)) { throw java.lang.RuntimeException("Failed to re-sign using ApkSigner") } try { - FileUtils.copyFile(tmpOutputApk, outApkFile) + outApkFile.parentFile?.let { if (!it.exists()) it.mkdirs() } + tmpOutputApk.copyTo(outApkFile, overwrite = true) } catch (e: java.lang.Exception) { throw java.lang.RuntimeException(e) } diff --git a/app/src/main/java/org/autojs/autojs/project/ProjectConfig.java b/app/src/main/java/org/autojs/autojs/project/ProjectConfig.java index cbb84097..a2cd68e6 100644 --- a/app/src/main/java/org/autojs/autojs/project/ProjectConfig.java +++ b/app/src/main/java/org/autojs/autojs/project/ProjectConfig.java @@ -38,6 +38,7 @@ import java.util.stream.Collectors; /** * Created by Stardust on Jan 24, 2018. + * Modified by SuperMonster003 as of Nov 19, 2025. */ public class ProjectConfig {