Golang: Gomobile app 无法生成文件

Golang: Gomobile app cannot generate files

有没有人用过 gomobile app 并在 phones 中成功创建文件?我在 Android 4.4.2 的 Galaxy S4 上尝试了以下代码:

package main
import (
    "golang.org/x/mobile/app"
    "golang.org/x/mobile/event/lifecycle"
    "golang.org/x/mobile/event/paint"
    "os"
)
func main() {
    os.Create("zzz.txt")
    app.Main(func(a app.App) {
        for e := range a.Events() {
            switch e := a.Filter(e).(type) {
            case lifecycle.Event:
                _=e
            case paint.Event:
                a.Publish()
            }
        }
    })
}

但是 phone 中没有创建文件。

我也试过一个叫"AnGoIde"的应用程序,它允许我们直接在Android中编写Go并编译,下面的代码能够创建"zzz.txt"文件:

package main
import "os"
func main(){
    os.Create("zzz.txt")
}

最终我想将所有错误保存在一个文件中,这样我就可以看到导致我的应用程序崩溃的原因,而 AnGoIde 不支持很多包,所以我不能将它用于我的测试。有没有人用gomobile apps成功生成过文件?

p.s。我试图将目录指定为“/storage/emulated/0/Go/”,这与我存储 apk 文件的位置相同,但不起作用。

要写入文件,您的应用需要某种形式的许可。

如果您没有,请创建一个 AndroidManifest.xml。您可以看到使用 -v 标志自动为您创建的文件 gomobile 的内容。 (gomobile build -v)

<manifest></manifest> 标签之间添加以下行。

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

再次构建应用程序。确保 gomobile 正在使用带有 -v 标志的清单文件。我能够通过 os.Create("/sdcard/zzz.txt") 创建文件。我还需要这个来调试,所以我不介意写入特定位置,即我的 sdcard。 当然,在您的 phone 中,位置可能会发生变化。

此外,如果您只需要一些日志,您可以安装 Android Debug Bridge 并使用 adb logcat。从您的 Go 应用中过滤掉日志 adb logcat | grep "I/GoLog" 会起作用。