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"
должно сработать.