diff --git a/app/src/main/java/org/autojs/autojs/build/ApkBuilder.kt b/app/src/main/java/org/autojs/autojs/build/ApkBuilder.kt index 7fa3df460..112ac8086 100644 --- a/app/src/main/java/org/autojs/autojs/build/ApkBuilder.kt +++ b/app/src/main/java/org/autojs/autojs/build/ApkBuilder.kt @@ -6,6 +6,7 @@ import com.stardust.app.GlobalAppContext import com.stardust.autojs.apkbuilder.ApkPackager import com.stardust.autojs.apkbuilder.ManifestEditor import com.stardust.autojs.project.BuildInfo +import com.stardust.autojs.project.Constant import com.stardust.autojs.project.ProjectConfig import com.stardust.autojs.script.EncryptedScriptFileHeader import com.stardust.autojs.script.JavaScriptFileSource @@ -16,11 +17,10 @@ import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.asSharedFlow import org.apache.commons.io.FileUtils import org.apache.commons.io.IOUtils +import org.autojs.autojs.tool.addAllIfNotExist import org.autojs.autojs.tool.copyTo import org.autojs.autojs.tool.parseUriOrNull import org.autojs.autojs.tool.unzip -import com.stardust.autojs.project.Constant -import org.autojs.autojs.tool.addAllIfNotExist import pxb.android.StringItem import pxb.android.axml.AxmlWriter import zhao.arsceditor.ArscUtil @@ -141,6 +141,11 @@ class ApkBuilder( } private fun encrypt(file: File, newFile: File) { + if (!projectConfig!!.isEncrypt){ + newFile.delete() + file.copyTo(newFile) + return + } val out = newFile.outputStream() EncryptedScriptFileHeader.writeHeader( out, diff --git a/app/src/main/java/org/autojs/autojs/ui/build/BuildPage.kt b/app/src/main/java/org/autojs/autojs/ui/build/BuildPage.kt index 46cca2e5c..e932c2032 100644 --- a/app/src/main/java/org/autojs/autojs/ui/build/BuildPage.kt +++ b/app/src/main/java/org/autojs/autojs/ui/build/BuildPage.kt @@ -154,6 +154,7 @@ fun BuildPage(model: BuildViewModel = viewModel()) { ConfigCard(model) PackagingOptionCard(model) RunConfigCard(model) + EncryptCard(model) SignatureCard(model) } } @@ -325,7 +326,19 @@ private fun SignatureCard( } } } - +@Composable +fun EncryptCard(model: BuildViewModel){ + Card { + Column( + Modifier + .fillMaxSize() + .padding(24.dp) + ){ + Text(text = stringResource(R.string.text_encrypt_options)) + CheckboxOption(model::isEncrypt, stringResource(id = R.string.text_is_encrypt)) + } + } +} @Composable private fun RunConfigCard(model: BuildViewModel) { val context = LocalContext.current diff --git a/app/src/main/java/org/autojs/autojs/ui/build/BuildViewModel.kt b/app/src/main/java/org/autojs/autojs/ui/build/BuildViewModel.kt index fbd759367..425777081 100644 --- a/app/src/main/java/org/autojs/autojs/ui/build/BuildViewModel.kt +++ b/app/src/main/java/org/autojs/autojs/ui/build/BuildViewModel.kt @@ -133,6 +133,7 @@ class BuildViewModel(private val app: Application, private var source: String) : var appSignKeyPath by mutableStateOf(null) var keyStore by mutableStateOf(null) + var isEncrypt by mutableStateOf(false) val isConfigurationHasChanged: Boolean get() { @@ -253,6 +254,7 @@ class BuildViewModel(private val app: Application, private var source: String) : projectDirectory = directory!! outputPath = viewModel.outputPath assets = updateAssets(assets) + isEncrypt = viewModel.isEncrypt updateLibs(libs) updateAbiList(abis) if (ignoredDirs.isEmpty()) ignoredDirs = listOf(buildDir) @@ -292,6 +294,7 @@ class BuildViewModel(private val app: Application, private var source: String) : icon = projectConfig.icon?.let { getUri(it) } + isEncrypt = projectConfig.isEncrypt mainScriptFile = projectConfig.mainScript ?: getMainScriptName() isStableMode = projectConfig.launchConfig.isStableMode displaySplash = projectConfig.launchConfig.displaySplash diff --git a/app/src/main/res-i18n/values/strings.xml b/app/src/main/res-i18n/values/strings.xml index 132b46f21..c8944ecfa 100644 --- a/app/src/main/res-i18n/values/strings.xml +++ b/app/src/main/res-i18n/values/strings.xml @@ -266,6 +266,8 @@ TesseractOCR 7zip 终端模拟器 + 简单加密js文件 + 加密选项 需要后台弹出界面权限 需要悬浮窗权限 音量上键结束任务 diff --git a/autojs/src/main/java/com/stardust/autojs/project/ProjectConfig.kt b/autojs/src/main/java/com/stardust/autojs/project/ProjectConfig.kt index 5be73d5cb..08b1e55fb 100644 --- a/autojs/src/main/java/com/stardust/autojs/project/ProjectConfig.kt +++ b/autojs/src/main/java/com/stardust/autojs/project/ProjectConfig.kt @@ -15,23 +15,16 @@ import java.util.zip.CRC32 */ @Keep data class ProjectConfig( - @SerializedName("name") var name: String? = null, - @SerializedName("packageName") var packageName: String? = null, - @SerializedName("versionCode") var versionCode: Int = 1, - @SerializedName("versionName") var versionName: String = "1.0.0", - @SerializedName("icon") var icon: String? = null, @SerializedName("main") var mainScript: String? = null, - @SerializedName("scripts") var scripts: Map = HashMap(), @SerializedName("build") var buildInfo: BuildInfo = BuildInfo(), - @SerializedName("launchConfig") var launchConfig: LaunchConfig = LaunchConfig(), @SerializedName("useFeatures") var features: ArrayList = arrayListOf(), @@ -44,6 +37,8 @@ data class ProjectConfig( var abis: MutableList = arrayListOf().apply { addAll(Constant.Abi.abis) }, var assets: List = emptyList(), var signingConfig: SigningConfig = SigningConfig(), + @SerializedName("encrypt-code") + var isEncrypt:Boolean = false ) { fun getAbsolutePath(name: String): String { diff --git a/inrt/src/main/java/com/stardust/auojs/inrt/SplashActivity.kt b/inrt/src/main/java/com/stardust/auojs/inrt/SplashActivity.kt index 4003253a5..093e2fba0 100644 --- a/inrt/src/main/java/com/stardust/auojs/inrt/SplashActivity.kt +++ b/inrt/src/main/java/com/stardust/auojs/inrt/SplashActivity.kt @@ -113,9 +113,11 @@ class SplashActivity : ComponentActivity() { Permissions.ACCESSIBILITY_SERVICES -> { requestAccessibilityService() } + Permissions.BACKGROUND_START -> { requestBackgroundStart() } + Permissions.DRAW_OVERLAY -> { requestDrawOverlays() } @@ -131,11 +133,12 @@ class SplashActivity : ComponentActivity() { super.onCreate(savedInstanceState) setContentView(R.layout.activity_splash) lifecycleScope.launch { - projectConfig = - ProjectConfig.fromAssetsAsync( - this@SplashActivity, - ProjectConfig.configFileOfDir("project") - )!! + projectConfig = withContext(Dispatchers.IO) { + ProjectConfig.fromAssets( + this@SplashActivity, + ProjectConfig.configFileOfDir("project") + )!! + } if (projectConfig.launchConfig.displaySplash) { val frame = findViewById(R.id.frame) frame.visibility = View.VISIBLE @@ -188,10 +191,12 @@ class SplashActivity : ComponentActivity() { permissionsResult[permission] = AccessibilityServiceTool.isAccessibilityServiceEnabled(this) } + Permissions.BACKGROUND_START -> { permissionsResult[permission] = BackgroundStartPermission.isBackgroundStartAllowed(this) } + Permissions.DRAW_OVERLAY -> { permissionsResult[permission] = DrawOverlaysPermission.isCanDrawOverlays(this) } diff --git a/inrt/src/main/java/com/stardust/auojs/inrt/launch/AssetsProjectLauncher.kt b/inrt/src/main/java/com/stardust/auojs/inrt/launch/AssetsProjectLauncher.kt index 84fe16d35..71e2534ea 100644 --- a/inrt/src/main/java/com/stardust/auojs/inrt/launch/AssetsProjectLauncher.kt +++ b/inrt/src/main/java/com/stardust/auojs/inrt/launch/AssetsProjectLauncher.kt @@ -96,7 +96,7 @@ open class AssetsProjectLauncher( private fun prepare() { val projectConfigPath = PFiles.join(mProjectDir, ProjectConfig.CONFIG_FILE_NAME) - val projectConfig = ProjectConfig.fromFile(projectConfigPath) + val projectConfig = ProjectConfig.fromProject(File(projectConfigPath)) if (!BuildConfig.DEBUG && projectConfig != null && TextUtils.equals(projectConfig.buildInfo.buildId, mProjectConfig.buildInfo.buildId) ) {