【发布时间】:2021-07-14 04:26:58
【问题描述】:
原题:
有人知道gomobile 构建(非绑定)如何支持文件系统吗? 如discussion 中所述,我能够使用资产包打开和读取文件。
但不确定如何在 gomobile 生成的 APK 文件中创建对新文件的写入 我能够在 Go 中运行以下充足的代码并验证“testFile.txt”是使用提供的消息创建的。
message := []byte("Hello, testing!")
err := ioutil.WriteFile("testFile.txt", message, 0777)
if err != nil {
fmt.Println(err)
}
但在生成 APK 文件并在平板电脑 (Android) 上运行后,我收到如下文件访问错误,并且未创建“testFile.txt”。
I/GoLog:打开 testFile.txt:只读文件系统
感谢任何提示。
根据instruction更新了我的问题:
你使用的是什么版本的 Go('go version')?
$ go version
go version go1.16.3 windows/amd64
最新版本是否会重现此问题?
不适用
您使用的是什么操作系统和处理器架构('go env')?
Windows 10 专业版
go env Output
$ go env
set GO111MODULE=auto
set GOARCH=amd64
set GOBIN=
set GOCACHE=C:\Users\instu\AppData\Local\go-build
set GOENV=C:\Users\instu\AppData\Roaming\go\env
set GOEXE=.exe
set GOFLAGS=
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GOINSECURE=
set GOMODCACHE=C:\Users\instu\OneDrive\Desktop\go-workSpace\pkg\mod
set GONOPROXY=
set GONOSUMDB=
set GOOS=windows
set GOPATH=C:\Users\instu\OneDrive\Desktop\go-workSpace
set GOPRIVATE=
set GOPROXY=https://proxy.golang.org,direct
set GOROOT=C:\Projects\Go
set GOSUMDB=sum.golang.org
set GOTMPDIR=
set GOTOOLDIR=C:\Projects\Go\pkg\tool\windows_amd64
set GOVCS=
set GOVERSION=go1.16.3
set GCCGO=gccgo
set AR=ar
set CC=gcc
set CXX=g++
set CGO_ENABLED=1
set GOMOD=C:\Users\instu\OneDrive\Desktop\go-workSpace\src\Minicloud\go.mod
set CGO_CFLAGS=-g -O2
set CGO_CPPFLAGS=
set CGO_CXXFLAGS=-g -O2
set CGO_FFLAGS=-g -O2
set CGO_LDFLAGS=-g -O2
set PKG_CONFIG=pkg-config
set GOGCCFLAGS=-m64 -mthreads -fmessage-length=0 -fdebug-prefix-map=C:\Users\instu\AppData\Local\Temp\go-build2510967962=/tmp/go-build -gno-record-gcc-switches
你做了什么?
在原始问题部分中进行了描述,但总的来说,我需要添加一个能够将日志写入三星 S6 lite 平板电脑上已安装的微型 SD 卡的功能。 这是我在 Go 中编写文件时遵循的 sample 代码。 它在我运行 go 时有效,但在平板电脑上生成和安装 APK 文件后我遇到只读错误消息
您希望看到什么?
期望 Android 应用(安装为 gomobile build 生成的 APK 文件)能够创建文件并写入创建的文件
你看到了什么?
只读错误信息。
I/GoLog:打开 testFile.txt:只读文件系统
【问题讨论】:
-
一个APK通常不会修改自己,我不确定Android操作系统是否允许。如果要保存文件,请选择适当的目录。不确定这是如何在 gomobile 中完成的,但是在 Android 上,有一些函数可以查询标准的应用程序私有目录,例如
getFilesDir()。 -
谢谢@Robert,是的。我已经尝试了几个选项来写入 Go 中的文件,但是在生成 APK 文件后,我收到了只读错误消息。我刚刚获得了一个外部 micro-SD,并在“AndroidManifest.xml”文件中添加了写入外部存储器的权限,但仍然需要弄清楚如何为外部 microSD 提供适当的路径。换句话说,需要在 Go 中找到可以模仿 Andorid 环境中 getExternalStorageState() 函数的行为的函数。
标签: android go apk gomobile gomobile-android