try to diagnose link failed errors

This commit is contained in:
qimiko committed 2024-01-19 16:41:28 -07:00
1 parent a62c3e1997
commit 7554a4888a
3 files changed
+48 -9

No files matched your search

@@ -61,17 +61,11 @@ class GeometryDashActivity : AppCompatActivity(), Cocos2dxHelper.Cocos2dxHelperL
// generates helpful information for use in debugging library load failures // generates helpful information for use in debugging library load failures
val gdPackageInfo = packageManager.getPackageInfo(Constants.PACKAGE_NAME, 0) val gdPackageInfo = packageManager.getPackageInfo(Constants.PACKAGE_NAME, 0)
val failureReason = LaunchUtils.diagnoseLoadErrors(this, gdPackageInfo)
val abi = LaunchUtils.applicationArchitecture
val isExtracted = gdPackageInfo.applicationInfo.flags and ApplicationInfo.FLAG_EXTRACT_NATIVE_LIBS == ApplicationInfo.FLAG_EXTRACT_NATIVE_LIBS
val isSplit = (gdPackageInfo.applicationInfo.splitSourceDirs?.size ?: 0) > 1
val metadata = "Geometry Dash metadata:\nSplit sources: $isSplit\nExtracted libraries: $isExtracted\nLauncher architecture: $abi"
Log.i("GeodeLauncher", metadata)
returnToMain( returnToMain(
getString(R.string.load_failed_link_error), getString(R.string.load_failed_link_error),
getString(R.string.load_failed_link_error_description) getString(R.string.load_failed_link_error_description, failureReason.name)
) )
return return
@@ -5,10 +5,16 @@ import android.content.pm.PackageInfo
import android.content.pm.PackageManager import android.content.pm.PackageManager
import android.content.res.AssetManager import android.content.res.AssetManager
import android.content.Context import android.content.Context
import android.content.pm.ApplicationInfo
import android.os.Build import android.os.Build
import android.util.Log
import java.io.File import java.io.File
object LaunchUtils { object LaunchUtils {
enum class FailureReason {
NOT_FOUND, ABI_MISMATCH, UNKNOWN
}
fun isGeometryDashInstalled(packageManager: PackageManager): Boolean { fun isGeometryDashInstalled(packageManager: PackageManager): Boolean {
return try { return try {
packageManager.getPackageInfo(Constants.PACKAGE_NAME, 0) packageManager.getPackageInfo(Constants.PACKAGE_NAME, 0)
@@ -34,6 +40,45 @@ object LaunchUtils {
return game.versionName return game.versionName
} }
fun diagnoseLoadErrors(context: Context, packageInfo: PackageInfo): FailureReason {
val abi = applicationArchitecture
val isExtracted =
packageInfo.applicationInfo.flags and ApplicationInfo.FLAG_EXTRACT_NATIVE_LIBS == ApplicationInfo.FLAG_EXTRACT_NATIVE_LIBS
val isSplit = (packageInfo.applicationInfo.splitSourceDirs?.size ?: 0) > 1
val metadata =
"Geometry Dash metadata:\nSplit sources: $isSplit\nExtracted libraries: $isExtracted\nLauncher architecture: $abi"
Log.i("GeodeLauncher", metadata)
// determine if it can find gd libraries for the opposite architecture
val gdBinaryName = "lib${Constants.COCOS_LIB_NAME}.so"
val oppositeArchitecture = if (abi == "arm64-v8a") "armeabi-v7a" else "arm64-v8a"
if (packageInfo.applicationInfo.nativeLibraryDir.contains(oppositeArchitecture)) {
return FailureReason.ABI_MISMATCH
}
if (!isExtracted) {
try {
context.assets.openNonAssetFd("lib/$oppositeArchitecture/$gdBinaryName")
return FailureReason.ABI_MISMATCH
} catch (_: Exception) {
// this is good, actually!
}
}
// try fetching for its own libraries (only for uncompressed libraries)
if (!isExtracted) {
try {
context.assets.openNonAssetFd("lib/$abi/$gdBinaryName")
} catch (_: Exception) {
return FailureReason.NOT_FOUND
}
}
return FailureReason.UNKNOWN
}
// supposedly CPU_ABI returns the current arch for the running application // supposedly CPU_ABI returns the current arch for the running application
// despite being deprecated, this is also one of the few ways to get this information // despite being deprecated, this is also one of the few ways to get this information
@Suppress("DEPRECATION") @Suppress("DEPRECATION")
+1 -1
View File
@@ -40,7 +40,7 @@
<!-- GeometryDashActivity strings --> <!-- GeometryDashActivity strings -->
<string name="load_failed_link_error">Failed to link libraries</string> <string name="load_failed_link_error">Failed to link libraries</string>
<string name="load_failed_link_error_description">Game libraries could not be found. This may occur if the architecture of the launcher and Geometry Dash do not match, or from a system bug.\nCheck application logs for more details. Please report this issue!</string> <string name="load_failed_link_error_description">Game libraries could not be found. This may occur if the architecture of the launcher and Geometry Dash do not match, or from a system bug.\nReported issue: %1$s.\nCheck application logs for more details.</string>
<string name="load_failed_generic_error">Load failed</string> <string name="load_failed_generic_error">Load failed</string>
<string name="load_failed_generic_error_description">Uncaught error during game load: `%1$s`.\nCheck application logs for more details. Please report this issue!</string> <string name="load_failed_generic_error_description">Uncaught error during game load: `%1$s`.\nCheck application logs for more details. Please report this issue!</string>
<string name="message_box_cancel">Cancel</string> <string name="message_box_cancel">Cancel</string>