集成Go编译AAR库的Android Kotlin应用触发OpenGL错误的问题排查求助
大家好,我目前在开发一个基于Kotlin的Android应用,需要集成一个由Go语言编写的第三方库。这个库已经通过gomobile -target=android编译成AAR文件,并且我已经通过Gradle的build.gradle.kts完成了集成。
这个Go库对外暴露了一个名为MyGoClass的类,里面包含了各类方法,但只要我调用这个类中的任意方法,Logcat就会输出一系列OpenGL相关的错误日志,示例如下:
11:12:44.543 GoLog E s_glBindAttribLocation: bind attrib 0 name inPosition
11:12:44.543 GoLog E s_glBindAttribLocation: bind attrib 1 name inColor
11:12:44.543 GoLog E s_glBindAttribLocation: bind attrib 2 name inCircleEdge
这些错误仅在Android Studio的Pixel 7模拟器上出现,而且是在特定场景下才会触发,下面是两个能稳定复现问题的场景:
场景1:初始渲染与首次点击事件时触发错误
当绘制一个按钮并第一次点击它时,就会出现上述错误,复现代码如下:
class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) enableEdgeToEdge() setContent { GoImportLibraryTheme { Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding -> MyGoClass.test() Button( onClick = { Toast.makeText(applicationContext, "Hello, this is a Toast!", Toast.LENGTH_SHORT).show() }, modifier = Modifier.padding(innerPadding) ) {} } } } } }
场景2:仅首次点击时触发错误(方法调用移至OnClick监听内)
如果我把MyGoClass.test()的调用移到按钮的onClick事件监听器内部,那么错误只会在第一次点击按钮时出现,代码如下:
class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) enableEdgeToEdge() setContent { GoImportLibraryTheme { Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding -> Button( onClick = { MyGoClass.test() Toast.makeText(applicationContext, "Hello, this is a Toast!", Toast.LENGTH_SHORT).show() }, modifier = Modifier.padding(innerPadding) ) {} } } } } }
补充说明:MyGoClass只是一个占位符,我测试了多个不同的Go编译AAR库,都会出现完全相同的行为,而且所有库都是通过gomobile -target=android命令编译的。
想请教各位大佬,这些OpenGL相关的错误到底是什么原因导致的?我应该采取哪些步骤来解决这个问题呢?非常感谢大家的帮助!
内容来源于stack exchange

