簡體   English   中英

“gomobile build”如何創建文件和寫入文件(安裝在三星平板電腦上的外部micro-SD卡)(在APK中)?

[英]“gomobile build” how to create files and write to files (external micro-SD card installed on Samsung tablet) (in APK)?

原問題:

有誰知道gomobile構建(不綁定)如何支持文件系統? 我能夠使用資產包來打開和讀取文件,如本次討論中所討論的

但不確定如何在由 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:只讀文件系統

任何提示表示贊賞。

根據此說明更新了我的問題:

您使用的是哪個版本的 Go(“go 版本”)?

$ go version
go version go1.16.3 windows/amd64

這個問題會在最新版本中重現嗎?

不適用

您使用的是什么操作系統和處理器架構('go env')?

視窗 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 平板電腦上已安裝的 micro-SD 卡。 這是我在 Go 中編寫文件所遵循的示例代碼。 當我運行 go 時它工作,但我在平板電腦上生成和安裝 APK 文件后遇到只讀錯誤消息

你期待看到什么?

期望Android應用程序(安裝為由gomobile build生成的APK文件)能夠創建文件並寫入創建的文件

你看到了什么?

只讀錯誤消息。

I/GoLog:打開 testFile.txt:只讀文件系統

此示例代碼適用於我(寫入內部存儲):

func storeLog(fileDir string, fileName string, msg string) {
    msgByte := []byte(msg)

    file, err := os.Create(fileDir + fileName)

    if err != nil
      fmt.Printf(err)
    defer file.Close()
    numB, err := file.Write(msgByte)

    if err != nil
      fmt.Printf(err)
enter code here
    fmt.Printf("wrote %d bytes\n", numB)
}

只需要確保:

  • 找到合適的fileDir:

adb -s <deviceID> shell echo $EXTERNAL_STORAGE

  • 使用以下命令查找您的 deviceID

亞行設備

  • 在 AndroidManifest.xml 文件中添加寫入文件的用戶權限

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM