-
Notifications
You must be signed in to change notification settings - Fork 40
Description
AndroidFaker v2.0-Beta-8 crashes immediately on launch when running on Android 9 (API 28) with WiFi enabled. The application throws a NotImplementedError (mb2) with the message "An operation is not implemented: VERSION.SDK_INT < Q" because the code attempts to use NetworkCapabilities.getSignalStrength(), which is only available on API 29+.
This behavior contradicts the README documentation which states "Support Android 8.1+".
Environment
| Component | Details |
|---|---|
| App Version | v2.0-Beta-8 (versionCode: 25110715) |
| Android Version | 9 (Pie) |
| API Level | 28 |
| Device/Emulator | LDPlayer 9 Emulator (Samsung SM-S9280 emulation) |
| Network State | WiFi enabled and connected |
| Root/Xposed | LSPosed v1.9.3 + Kitsune Magisk v27.2 |
Note: Testing was performed only on LDPlayer 9 emulator. Physical Android 9 device testing was not conducted. Developer verification on physical hardware is recommended.
Steps to Reproduce
- Install AndroidFaker v2.0-Beta-8 on an Android 9 (API 28) device or emulator
- Ensure WiFi is enabled and connected
- Launch AndroidFaker
- Observe: Application crashes immediately with
VERSION.SDK_INT < Qerror
Expected Behavior
The application should launch successfully on Android 9 with WiFi enabled, consistent with the documented "Android 8.1+" support claim in the README.
Actual Behavior
The application crashes immediately during AppListFragment.onViewCreated() initialization. The crash prevents any functionality from being accessed.
Stack Trace
FATAL EXCEPTION: main
Process: com.android1500.androidfaker, PID: 5786
mb2: An operation is not implemented: VERSION.SDK_INT < Q
at p92.b(NetworkConnectionManager.kt:77)
at p92.<init>(NetworkConnectionManager.kt:107)
at nb.invoke(R8$$SyntheticClass:70)
at org.koin.core.instance.InstanceFactory.create(InstanceFactory.kt:57)
at org.koin.core.instance.SingleInstanceFactory.create(SingleInstanceFactory.kt:10)
at org.koin.core.instance.SingleInstanceFactory.get$lambda$0(SingleInstanceFactory.kt:7)
at org.koin.core.instance.SingleInstanceFactory.a(SingleInstanceFactory.kt:1)
at o83.invoke(R8$$SyntheticClass:5)
at org.koin.mp.KoinPlatformTools.synchronized(KoinPlatformTools.kt:12)
at org.koin.core.instance.SingleInstanceFactory.get(SingleInstanceFactory.kt:13)
at org.koin.core.registry.InstanceRegistry.resolveInstance$koin_core(InstanceRegistry.kt:23)
at org.koin.core.resolution.CoreResolver.resolveFromRegistry(CoreResolver.kt:19)
...
at com.android1500.androidfaker.ui.screens.applist.AppListFragment.getViewModel(AppListFragment.kt:3)
at com.android1500.androidfaker.ui.screens.applist.AppListFragment.setupPremiumDialog(AppListFragment.kt:1)
at com.android1500.androidfaker.ui.screens.applist.AppListFragment.onViewCreated(AppListFragment.kt:42)
at androidx.fragment.app.Fragment.performViewCreated(Fragment.java:15)
...
at android.app.ActivityThread.main(ActivityThread.java:6831)
Root Cause Analysis
Location
File: NetworkConnectionManager.kt (obfuscated as p92.java)
Method: b() (line 77)
Technical Details
The crash occurs in the network status detection logic. Based on decompilation analysis:
// Pseudo-code reconstruction from p92.java
fun getNetworkStatus(): NetworkConnection {
val networkCapabilities = connectivityManager.getNetworkCapabilities(activeNetwork)
if (networkCapabilities != null) {
if (!networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) {
// Cellular/Ethernet path - works on Android 9
return if (networkCapabilities.hasTransport(TRANSPORT_CELLULAR)) Cellular else Other
} else {
// WiFi path - crashes on Android 9
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) { // Q = API 29
throw NotImplementedError("VERSION.SDK_INT < Q") // <-- CRASH POINT
}
val signalStrength = networkCapabilities.getSignalStrength() // API 29+ only
return WiFi(signalStrength)
}
}
return None
}API Compatibility Issue
The method NetworkCapabilities.getSignalStrength() was introduced in Android 10 (API 29):
| API Level | Android Version | getSignalStrength() Available |
|---|---|---|
| 28 | Android 9 (Pie) | NO |
| 29 | Android 10 (Q) | Yes |
| 30+ | Android 11+ | Yes |
The code explicitly throws an exception for API levels below 29 instead of implementing a graceful fallback.
Initialization Chain
App Launch
→ MainActivity.onCreate()
→ AppListFragment.onViewCreated()
→ setupPremiumDialog()
→ getViewModel()
→ Koin DI resolves NetworkConnectionManager
→ p92 constructor calls registerNetworkCallback()
→ Network callback invokes b() method
→ WiFi detected + SDK < 29
→ throw NotImplementedError // CRASH
Verification Tests
Testing conducted on Android emulators:
| Test Case | Network State | Android Version | Emulator | Result |
|---|---|---|---|---|
| A | WiFi ON | 9 (API 28) | LDPlayer 9 | CRASH |
| B | WiFi OFF (Cellular) | 9 (API 28) | LDPlayer 9 | Works |
| C | WiFi ON | 12 (API 32) | MuMu Player | Works |
| D | WiFi OFF | 12 (API 32) | MuMu Player | Works |
Key Finding: The crash occurs specifically when WiFi is enabled on Android 9. Disabling WiFi allows the application to launch successfully on Android 9.
Possible Solutions
Option 1: Add Fallback for API < 29 (Recommended)
// In NetworkConnectionManager.kt, method b()
} else { // WiFi connected
val signalStrength = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
networkCapabilities.getSignalStrength()
} else {
// Fallback for Android 9: use default signal strength
SignalStrength.UNKNOWN.value
}
return WiFi(signalStrength)
}Option 2: Use Alternative API for Android 9
// Use WifiManager for signal strength on older APIs
private fun getWifiSignalStrength(): Int {
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
networkCapabilities.getSignalStrength()
} else {
val wifiManager = context.getSystemService(Context.WIFI_SERVICE) as WifiManager
val rssi = wifiManager.connectionInfo.rssi
WifiManager.calculateSignalLevel(rssi, 5) // Returns 0-4
}
}Option 3: Conditional Initialization
// In Koin module - conditionally create implementation based on SDK version
single<NetworkConnection> {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
NetworkConnectionManagerImpl(get())
} else {
NetworkConnectionFallbackImpl(get()) // Simplified version for API < 29
}
}Temporary Workarounds
Until this issue is resolved, Android 9 users can:
- Disable WiFi before launching the application (use cellular data instead)
- Upgrade to Android 10+ emulator or device
- Use emulators with Android 12+ (e.g., MuMu Player Android 12)
Additional Context
- The APK's
minSdkis set to 28 (Android 9), indicating intended Android 9 support - The README documentation states "Support Android 8.1+"
- This appears to be a regression introduced in the v2.0 beta series (Kotlin rewrite)
- Similar crash reports exist in XDA Forums from other Android 9 users
Related Documentation
- NetworkCapabilities.getSignalStrength() - Android Developers
- Documentation confirms: "Added in API level 29"