use base directory for geode libraries

This commit is contained in:
qimiko committed 2024-01-08 03:08:35 -07:00
1 parent f8d7f7f788
commit a139cc798a
3 files changed
+18 -43

No files matched your search

@@ -146,29 +146,6 @@ class GeometryDashActivity : AppCompatActivity(), Cocos2dxHelper.Cocos2dxHelperL
return "$sourceDir!/lib/$architecture/"
}
@SuppressLint("UnsafeDynamicallyLoadedCode")
private fun loadLibraryFromAssetsCopy(libraryName: String) {
// loads a library loaded in assets
// this copies the library to a non-compressed directory
val arch = LaunchUtils.getApplicationArchitecture()
val libraryFd = try {
assets.openNonAssetFd("lib/$arch/lib$libraryName.so")
} catch (_: Exception) {
throw UnsatisfiedLinkError("Could not find library lib$libraryName.so for abi $arch")
}
// copy the library to a path we can access
// there doesn't seem to be a way to load a library from a file descriptor
val libraryCopy = File(cacheDir, "lib$libraryName.so")
val libraryOutput = libraryCopy.outputStream()
DownloadUtils.copyFile(libraryFd.createInputStream(), libraryOutput)
System.load(libraryCopy.path)
return
}
@SuppressLint("UnsafeDynamicallyLoadedCode")
private fun loadGeodeLibrary(): Boolean {
// Load Geode if exists
@@ -189,7 +166,6 @@ class GeometryDashActivity : AppCompatActivity(), Cocos2dxHelper.Cocos2dxHelperL
// you know zmx i have 0 clue what this does so im
// just gonna like copy the binary from external
// also i get 20 million permission denied errors
getExternalFilesDir(null)?.let { dir ->
val externalGeodePath = LaunchUtils.getInstalledGeodePath(this) ?: return false
val copiedPath = File(filesDir.path, "copied")
@@ -198,18 +174,18 @@ class GeometryDashActivity : AppCompatActivity(), Cocos2dxHelper.Cocos2dxHelperL
}
copiedPath.mkdir()
val geodePath = File(copiedPath.path, "Geode.so")
val copiedGeodePath = File(copiedPath.path, "Geode.so")
if (externalGeodePath.exists()) {
DownloadUtils.copyFile(
FileInputStream(externalGeodePath),
FileOutputStream(geodePath)
FileOutputStream(copiedGeodePath)
)
if (geodePath.exists()) {
if (copiedGeodePath.exists()) {
try {
println("Loading Geode from ${externalGeodePath.name}")
System.load(geodePath.path)
System.load(copiedGeodePath.path)
} catch (e: UnsatisfiedLinkError) {
e.printStackTrace()
}
@@ -217,8 +193,6 @@ class GeometryDashActivity : AppCompatActivity(), Cocos2dxHelper.Cocos2dxHelperL
}
}
}
return false
}
@@ -257,6 +231,7 @@ class GeometryDashActivity : AppCompatActivity(), Cocos2dxHelper.Cocos2dxHelperL
hideSystemUi()
}
@Suppress("DEPRECATION")
private fun hideSystemUi() {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R) {
// window compat is dumb!!
@@ -275,6 +250,7 @@ class GeometryDashActivity : AppCompatActivity(), Cocos2dxHelper.Cocos2dxHelperL
}
}
@Suppress("DEPRECATION")
private fun setLegacyVisibility() {
// setDecorFitsSystemWindows doesn't hide anything
window.decorView.systemUiVisibility =
@@ -401,13 +377,13 @@ class GeometryDashActivity : AppCompatActivity(), Cocos2dxHelper.Cocos2dxHelperL
}
testDirPath.mkdir()
getExternalFilesDir(null)?.let { dir ->
val testingPath = dir.path + File.separator + "test" + File.separator
val dir = LaunchUtils.getBaseDirectory(this)
val testingPath = File(dir, "test")
File(testingPath).walk().forEach {
testingPath.walk().forEach {
if (it.isFile) {
// welcome to the world of Android classloader permissions
val outputFile = File(testDirPath.path + File.separator + it.name)
val outputFile = File(testDirPath, it.name)
DownloadUtils.copyFile(
FileInputStream(it),
FileOutputStream(outputFile)
@@ -423,4 +399,3 @@ class GeometryDashActivity : AppCompatActivity(), Cocos2dxHelper.Cocos2dxHelperL
}
}
}
}
@@ -33,21 +33,23 @@ object LaunchUtils {
fun getInstalledGeodePath(context: Context): File? {
val geodeName = getGeodeFilename()
val internalGeodePath = File(context.filesDir.path, "launcher/$geodeName")
val internalGeodePath = File(context.filesDir, "launcher/$geodeName")
if (internalGeodePath.exists()) {
return internalGeodePath
}
context.getExternalFilesDir(null)?.let { dir->
val updateGeodePath = File(dir.path, "game/geode/update/$geodeName")
val externalGeodeDir = getBaseDirectory(context)
val updateGeodePath = File(externalGeodeDir, "launcher/$geodeName")
if (updateGeodePath.exists()) {
return updateGeodePath
}
val externalGeodePath = File(dir.path, geodeName)
val externalGeodePath = File(externalGeodeDir, geodeName)
if (externalGeodePath.exists()) {
return externalGeodePath
}
}
return null
}
@@ -176,9 +176,7 @@ class ReleaseManager private constructor(
private fun getGeodeOutputPath(): File {
val geodeName = LaunchUtils.getGeodeFilename()
val fallbackPath = File(applicationContext.filesDir, "launcher")
val geodeDirectory = applicationContext.getExternalFilesDir("") ?: fallbackPath
val geodeDirectory = LaunchUtils.getBaseDirectory(applicationContext)
return File(geodeDirectory, geodeName)
}