Three release-breaking issues found in the v4.5.0 APK (app crashed on
launch, label showed "Morse Expert", dex shrank to 282KB vs 3.5MB):
1. app_name: the ported app_values.xml shipped a "Morse Expert"
app_name string which overrode Look4Sat Pro's label during resource
merging - removed (no other string collisions).
2. R8 stripped nearly all code: the in-app sun.misc.Unsafe/Cleaner
stubs clashed with android.jar library classes. Moved stubs to
com.rtbishop.look4sat.feature.cw.suncompat and updated k3.d/s/r
imports (k3.r keeps the reflective Class.forName("sun.misc.Unsafe")
string, which returns null on Android hidden-API limits).
3. proguard-rules.pro added (AGP 9 variant-level
CanProduceConsumerProguardFiles): keep pas.** (JNI RegisterNatives
resolves by class name) plus all ported CW classes.
4. app-level ndk abiFilters forced to armeabi-v7a: the ported
libnativedecoderjni.so is v7a-only, so a multi-ABI APK would crash
with UnsatisfiedLinkError on arm64 devices.
Verified: :feature:cw:compileDebugKotlin BUILD SUCCESSFUL.
39 lines
1.1 KiB
Kotlin
39 lines
1.1 KiB
Kotlin
import com.android.build.api.dsl.LibraryExtension
|
|
import com.android.build.api.variant.CanProduceConsumerProguardFiles
|
|
|
|
plugins {
|
|
alias(libs.plugins.convention.featurePlugin)
|
|
}
|
|
|
|
android {
|
|
namespace = "com.rtbishop.look4sat.feature.cw"
|
|
compileOptions {
|
|
encoding = "UTF-8"
|
|
}
|
|
// 照搬 Morse Expert 1.15: native 解码器仅 armeabi-v7a
|
|
defaultConfig {
|
|
ndk {
|
|
abiFilters += listOf("armeabi-v7a")
|
|
}
|
|
}
|
|
}
|
|
|
|
// CW 类保持规则(JNI 按类名注册 + 照搬混淆类保逻辑), 由 app 的 R8 消费
|
|
// AGP 9: consumer 规则走 variant 级 CanProduceConsumerProguardFiles
|
|
androidComponents {
|
|
onVariants(selector().all()) { variant ->
|
|
(variant as? CanProduceConsumerProguardFiles)?.consumerProguardFiles?.add(
|
|
project.layout.projectDirectory.file("proguard-rules.pro")
|
|
)
|
|
}
|
|
}
|
|
|
|
dependencies {
|
|
implementation("androidx.constraintlayout:constraintlayout:2.2.1")
|
|
}
|
|
|
|
// 照搬的 Java 源码含中文注释, 强制 UTF-8 编译(compileOptions 在部分 AGP 版本不生效)
|
|
tasks.withType<JavaCompile>().configureEach {
|
|
options.encoding = "UTF-8"
|
|
}
|