Ошибка локального импорта в нелокальном пакете

#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… Больше не происходит, так как теперь я выполняю правильную команду.]

Надеюсь, это поможет кому-то еще, у кого есть эта проблема!