#go #gomobile
#Вперед #gomobile
Вопрос:
Я пытаюсь сгенерировать файл .aar в 64-битной версии Windows 7 с помощью команды gomobile bind --target=android
, и это выдает мне ошибку заголовка. Я искал и не смог найти ответ на этот вопрос. Я пытаюсь создать приложение в Android Studio с помощью программы, и первая ее часть выглядит следующим образом:
package main (I changed it to "random" for the bind command to work - that's the thing to do, right?)
import (
"github.com/elazarl/goproxy"
"text/template"
"net/http"
"regexp"
"bytes"
"log"
"net"
)
Ошибка заключается в следующем:
gomobile: go build -buildmode=c-shared -o=C:Users\[User name]AppDataLocalTempgomobile-work-101707703androidsrcmainjniLibsarmeabi-v7alibgojni.so gobind failed: exit status 1
..\[User name]AppDataLocalTempgomobile-work-101707703srcgobindgo_randommain.go:17:2: local import "." in non-local package
Одно из руководств, которым я следую,https://dzone.com/articles/gomobile-library-development-for-iosandroid и именно оттуда я делаю большинство вещей. Я никогда не слышал об этом языке, так что я новичок (извините, если это глупый вопрос).
Согласно тому, что я прочитал, это могло быть связано с тем, что в программе было, например, «.greetings» (что-то с «. «, что имело отношение к относительным путям), поэтому я понятия не имею, почему это происходит. Кто-нибудь может помочь? Если мне нужно предоставить больше данных, просто скажите мне, и я их предоставлю.
Заранее спасибо!
РЕДАКТИРОВАТЬ: я попытался изменить «package random» на «package thing», и последняя часть ошибки изменила «random» на «thing»:
..\[User name]AppDataLocalTempgomobile-work-101707703srcgobindgo_thingmain.go:17:2: local import "." in non-local package
Предполагается, что я не должен пытаться преобразовать эту программу, потому что она написана способом, который не может быть преобразован? Или что-то еще?
И если это как-то поможет, в моем имени пользователя в Windows есть пробел, хотя в CMD оно отображается с незаконченным именем и ~ 1 в конце, поэтому в нем нет пробела, по крайней мере, при возврате команды. И я не могу понять, на что указывают эти 17: 2. Я знаю, что это строка и столбец, но я не знаю, где искать ошибку, поскольку я даже пытался перейти к сгенерированному файлу и не могу его найти. Когда я скопировал созданную папку, вместе с ней пришло только 4 или 5 файлов без папок, поэтому я не могу увидеть ошибку в этом файле, чтобы понять это… Надеюсь, кто-нибудь знает ответ или возможный ответ на этот вопрос.
ПРАВКА 2: Теперь я решил попытаться удалить весь код после импорта и сохранить в файле .go только то, что показано в коде, и это выдало следующую ошибку:
gomobile: C:Users[User name]gobingobind.exe -lang=go,java -outdir=C:Users[User nameAppDataLocalTempgomobile-work-847973191 . failed: exit status 1
no exported names in the package "."
no exported names in the package "."
no exported names in the package "."
no exported names in the package "."
И у меня нет никакого «.» в файле, поэтому я мог бы подумать, что «.» ссылается на какой-то пакет, но я понятия не имею, поскольку импортировано только 4, а не 7.
И только сейчас я удалил все в файле, кроме первой строки с надписью package random
, и она выдает ту же ошибку, что и выше. Любая помощь с этим? (Если мне нужно предоставить больше информации, скажите мне) Я не могу понять, что является ее причиной, поскольку единственные примеры, которые я видел в Интернете, были связаны с относительным импортом в файле. У меня неверный GOPATH? У меня это значение по умолчанию %USERNAME%/go
. И это был исполняемый файл. Я попытался преобразовать его в библиотеку, изменив пакет на случайный. Я не знаю, имеет ли это какое-либо отношение к этому или даже нужно ли мне изменить что-либо еще, чтобы использовать его в качестве библиотеки.
EDIT 3 (too many, but I’m trying to give as much information as I can):
I tried to delete piece by piece the code until the first error changed to other and the only code in the program left was this:
package thing
func ExternalIP()
С этим кодом он по-прежнему выдает первую ошибку. Если я пытаюсь удалить первую строку, появляется ошибка ожидания пакета. Но если я попытаюсь изменить имя этой функции, даже изменить E на e, это выдаст третью ошибку. Я не знаю, что особенного в этом имени функции, но я не могу найти имя «externalIP» ни в одном файле на всем моем компьютере, поэтому я не знаю, какое это имеет отношение к нелокальному импорту или чему-то подобному.
Если это поможет, программа, которую я пытаюсь установить в Android Studio, следующая:https://github.com/mondul/PS3-Proxy/blob/master/ps3-proxy.go (это не мое, и я намерен воздать должное человеку, который это сделал, если я когда-нибудь смогу понять, как преобразовать это в .файл aar, а затем использовать его в Android Studio).
ПРАВКА 4:
Я попытался запустить эту команду с файлом ps3-proxy.go (файл, который я хочу преобразовать) внутри GOPATH / src / folder, и это выдало другую ошибку:
gomobile: go build -buildmode=c-shared -o=C:Users[User Name]AppDataLocalTempgomobile-work-722000459androidsrcmainjniLibsarmeabi-v7alibgojni.so gobind failed: exit status 2
# runtime/cgo
clang.exe: error: unknown argument: '-fno-addrsig'
Я не знаю, что это значит, потому что я даже не могу найти что-либо об этой конкретной ошибке с clang.exe в Google, поэтому я не знаю, «решил» ли я основную проблему, но создал другую, или мне не следовало помещать туда файл, а затем я возвращаюсь к основной проблеме (даже если я все сделал правильно, у меня есть другая проблема, о которой я тоже ничего не могу найти …).
ОТРЕДАКТИРУЙТЕ 5 (круто, еще 5 …):
Я попробовал другой код и, проделав то же самое в других тестах, получил те же ошибки, что и в исходной программе, так что, вероятно, это не связано с программой… Удивительно, теперь я точно понятия не имею, что делать. Код следующий, на всякий случай, если это может быть полезно:
package random
import (
"math/rand"
"time"
)
func SudoRandomNumer() int {
return rand.Intn(time.Now().Second())
}
Это ошибка? Я думаю, что я установил все так, как должно быть (ну, или, вероятно, нет, или, возможно, этого бы не происходило). И я пытался удалить и установить снова примерно 3 раза. И это все еще не работает. Этот код я взял с найденного мной веб-сайта с примерами того, как сделать то, что я хотел сделать: http://www.codingvelocity.com/2015/08/08/go-bind-intro.html .
Ответ №1:
Итак, я наконец понял, в чем проблема с РЕДАКТИРОВАНИЕМ 4 (и я думаю, что это было правильно, по крайней мере, в моем случае)… Поскольку это, вероятно, не было связано с какой-либо программой, и в ошибке говорилось, что, возможно, придется делать clang.exe Я пошел искать его и обнаружил, что он находится внутри папки ndk-bundle. Эту папку я скачал с официального веб-сайта, переименовал ее и поместил в свою папку Android SDK Tools и использовал ее. Я не знаю, почему я не загрузил его из Android Studio, но я этого не сделал. Итак, узнав, что файл находится внутри папки, которую я загрузил извне, а не из Android Studio, я удалил все и заново загрузил пакет NDK, но на этот раз из Android Studio (и на всякий случай, может быть полезно знать, я загрузил все остальное, что отображается, когда мы нажимаем, чтобы показать устаревшие пакеты), и это, наконец, сработало! Затем, чтобы убедиться, что проблема заключалась в том, что я переписал ее из-за пределов Android Studio, я снова использовал эту загруженную версию, и она выдала то же самое clang.exe ошибка. И после этого, повторная попытка с версией, загруженной из Android Studio, снова сработала. Так что это может быть ошибка или что-то в этом роде, потому что, по крайней мере, для меня это работает только с версией пакета Android Studio NDK, а не с загруженной с их веб-сайта. Это странно, но, по крайней мере, это наконец-то работает.
Теперь я просто не могу понять, почему я должен помещать ВСЕ файлы, которые я хочу преобразовать, в GOPATH src [папку], чтобы они работали, и не выдавать мне ошибку нелокальной вещи (кстати, в моем случае мой GOPATH C:Users [Имя пользователя] перейти, на случай, если может быть полезно знать)… Обе программы (одна с GitHub, а другая с веб-сайта с руководством) должны быть помещены в подобный путь для преобразования и не могут быть преобразованы за его пределами. Это странно. Я не знаю, должно ли это быть так, но, по крайней мере, это работает… [РЕДАКТИРОВАТЬ: Это потому, что я не читал документацию о том, как выполнять программы go… Больше не происходит, так как теперь я выполняю правильную команду.]
Надеюсь, это поможет кому-то еще, у кого есть эта проблема!