Golang: приложение Gomobile не может генерировать файлы

Кто-нибудь раньше использовал приложение gomobile и успешно создавал файлы в телефонах? Я попробовал следующий код на Galaxy S4 с Android 4.4.2:

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()
            }
        }
    })
}

Однако файл не создается в телефоне.

Я также попробовал приложение под названием "AnGoIde", которое позволяет нам писать Go и компилировать непосредственно в Android, а следующий код может создать файл "zzz.txt":

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

В конце концов я хотел бы сохранить все ошибки в файле, чтобы увидеть причину сбоя моих приложений, и AnGoIde не поддерживает много пакетов, поэтому я не могу использовать его для своих тестов. Кто-нибудь успешно генерировал файлы с приложениями для мобильных устройств раньше?

PS Я попытался указать каталог "/storage/emulated/0/Go/", это то же самое место, где я храню файл apk, но не работает.

1 ответ

Решение

Для записи в файл вашему приложению требуется некоторая форма разрешения.

Если у вас его нет, создайте AndroidManifest.xml, Вы можете увидеть содержимое файла gomobile автоматически создавать для вас, используя -v флаг. (gomobile build -v)

Добавьте следующую строку между <manifest> а также </manifest> теги.

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

Создайте приложение снова. Удостовериться gomobile использует ваш файл манифеста с помощью -v флаг. Я смог создать файл os.Create("/sdcard/zzz.txt"), Я также нуждался в этом для отладки, поэтому я не возражал писать в определенное место, а именно на мою SDCard. Конечно, в вашем телефоне местоположение может измениться.

Кроме того, если вам нужны только логи, вы можете установить Android Debug Bridge и использовать adb logcat. Чтобы отфильтровать журналы из приложения Go adb logcat | grep "I/GoLog" должно сработать.

Другие вопросы по тегам