6.7.0 - Alpha13 - 修复 Android 7.x 可能无法正常使用打包功能的问题

This commit is contained in:
SuperMonster003
2026-01-03 20:19:28 +08:00
parent f243a5fd23
commit b84cbab0a5
3 changed files with 16 additions and 4 deletions

View File

@@ -64,6 +64,7 @@
"Android 10 UiObject#child 方法可能出现 ArrayIndexOutOfBoundsException 异常的问题 _[`issue #416`](http://issues.autojs6.com/416)_", "Android 10 UiObject#child 方法可能出现 ArrayIndexOutOfBoundsException 异常的问题 _[`issue #416`](http://issues.autojs6.com/416)_",
"运行项目时 project.json 配置参数可能无法正常解析的问题", "运行项目时 project.json 配置参数可能无法正常解析的问题",
"项目打包时 project.json 的 excludedDirs 配置参数将导致配置文件解析失败的问题 _[`issue #428`](http://issues.autojs6.com/428)_", "项目打包时 project.json 的 excludedDirs 配置参数将导致配置文件解析失败的问题 _[`issue #428`](http://issues.autojs6.com/428)_",
"Android 7.x 可能无法正常使用打包功能的问题",
"项目配置文件中构建版本号或构建时间出现较大数字时可能导致应用崩溃的问题", "项目配置文件中构建版本号或构建时间出现较大数字时可能导致应用崩溃的问题",
"频繁获取或重建 ImageReader 时可能因缓冲区暂无可用帧导致应用崩溃的问题", "频繁获取或重建 ImageReader 时可能因缓冲区暂无可用帧导致应用崩溃的问题",
"输入事件观察器 InputEventObserver 可能导致应用启动时明显卡顿的问题", "输入事件观察器 InputEventObserver 可能导致应用启动时明显卡顿的问题",

View File

@@ -9,7 +9,6 @@ import android.os.Build
import android.util.Log import android.util.Log
import com.mcal.apksigner.ApkSigner import com.mcal.apksigner.ApkSigner
import com.reandroid.arsc.chunk.TableBlock import com.reandroid.arsc.chunk.TableBlock
import org.apache.commons.io.FileUtils
import org.autojs.autojs.AbstractAutoJs.Companion.isInrt import org.autojs.autojs.AbstractAutoJs.Companion.isInrt
import org.autojs.autojs.apkbuilder.keystore.AESUtils import org.autojs.autojs.apkbuilder.keystore.AESUtils
import org.autojs.autojs.app.GlobalAppContext 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 defaultKeyStoreFile = File(buildPath, "default_key_store.bks")
val tmpOutputApk = File(buildPath, "temp.apk") 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 { val signer = ApkSigner(outApkFile, tmpOutputApk).apply {
useDefaultSignatureVersion = false useDefaultSignatureVersion = false
@@ -329,13 +337,15 @@ open class ApkBuilder(apkInputStream: InputStream?, private val outApkFile: File
aliasPassword = AESUtils.decrypt(it.aliasPassword) aliasPassword = AESUtils.decrypt(it.aliasPassword)
} }
// 使用 ApkSigner 重新签名 // Re-sign using ApkSigner.
// zh-CN: 使用 ApkSigner 重新签名.
if (!signer.signRelease(keyStoreFile, password, alias, aliasPassword)) { if (!signer.signRelease(keyStoreFile, password, alias, aliasPassword)) {
throw java.lang.RuntimeException("Failed to re-sign using ApkSigner") throw java.lang.RuntimeException("Failed to re-sign using ApkSigner")
} }
try { try {
FileUtils.copyFile(tmpOutputApk, outApkFile) outApkFile.parentFile?.let { if (!it.exists()) it.mkdirs() }
tmpOutputApk.copyTo(outApkFile, overwrite = true)
} catch (e: java.lang.Exception) { } catch (e: java.lang.Exception) {
throw java.lang.RuntimeException(e) throw java.lang.RuntimeException(e)
} }

View File

@@ -38,6 +38,7 @@ import java.util.stream.Collectors;
/** /**
* Created by Stardust on Jan 24, 2018. * Created by Stardust on Jan 24, 2018.
* Modified by SuperMonster003 as of Nov 19, 2025.
*/ */
public class ProjectConfig { public class ProjectConfig {