Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

x/mobile: reverse binding testdata build failed #62142

Open
no-bibi opened this issue Aug 18, 2023 · 10 comments
Open

x/mobile: reverse binding testdata build failed #62142

no-bibi opened this issue Aug 18, 2023 · 10 comments
Labels
mobile Android, iOS, and x/mobile NeedsInvestigation Someone must examine and confirm this is a valid issue and not a duplicate of an existing one.
Milestone

Comments

@no-bibi
Copy link

no-bibi commented Aug 18, 2023

What version of Go are you using (go version)?

$ go version
go version go1.21.0 darwin/amd64

Does this issue reproduce with the latest release?

yes

What operating system and processor architecture are you using (go env)?

go env Output
$ go env
GO111MODULE='on'
GOARCH='amd64'
GOBIN=''
GOCACHE='/Users/builder/Library/Caches/go-build'
GOENV='/Users/builder/Library/Application Support/go/env'
GOEXE=''
GOEXPERIMENT=''
GOFLAGS=''
GOHOSTARCH='amd64'
GOHOSTOS='darwin'
GOINSECURE=''
GOMODCACHE='/Users/builder/go/pkg/mod'
GONOPROXY=''
GONOSUMDB=''
GOOS='darwin'
GOPATH='/Users/builder/go'
GOPRIVATE=''
GOPROXY='https://goproxy.io'
GOROOT='/usr/local/go'
GOSUMDB='sum.golang.org'
GOTMPDIR=''
GOTOOLCHAIN='auto'
GOTOOLDIR='/usr/local/go/pkg/tool/darwin_amd64'
GOVCS=''
GOVERSION='go1.21.0'
GCCGO='gccgo'
GOAMD64='v1'
AR='ar'
CC='clang'
CXX='clang++'
CGO_ENABLED='1'
GOMOD='/dev/null'
GOWORK=''
CGO_CFLAGS='-O2 -g'
CGO_CPPFLAGS=''
CGO_CXXFLAGS='-O2 -g'
CGO_FFLAGS='-O2 -g'
CGO_LDFLAGS='-O2 -g'
PKG_CONFIG='pkg-config'
GOGCCFLAGS='-fPIC -arch x86_64 -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -ffile-prefix-map=/var/folders/mn/7czq6y1x1v17_xhp8bbkgjj40000gn/T/go-build2139566021=/tmp/go-build -gno-record-gcc-switches -fno-common'
➜  android-33 go version
go version go1.21.0 darwin/amd64
➜  android-33 go env
GO111MODULE='on'
GOARCH='amd64'
GOBIN=''
GOCACHE='/Users/builder/Library/Caches/go-build'
GOENV='/Users/builder/Library/Application Support/go/env'
GOEXE=''
GOEXPERIMENT=''
GOFLAGS=''
GOHOSTARCH='amd64'
GOHOSTOS='darwin'
GOINSECURE=''
GOMODCACHE='/Users/builder/go/pkg/mod'
GONOPROXY=''
GONOSUMDB=''
GOOS='darwin'
GOPATH='/Users/builder/go'
GOPRIVATE=''
GOPROXY='https://goproxy.io'
GOROOT='/usr/local/go'
GOSUMDB='sum.golang.org'
GOTMPDIR=''
GOTOOLCHAIN='auto'
GOTOOLDIR='/usr/local/go/pkg/tool/darwin_amd64'
GOVCS=''
GOVERSION='go1.21.0'
GCCGO='gccgo'
GOAMD64='v1'
AR='ar'
CC='clang'
CXX='clang++'
CGO_ENABLED='1'
GOMOD='/dev/null'
GOWORK=''
CGO_CFLAGS='-O2 -g'
CGO_CPPFLAGS=''
CGO_CXXFLAGS='-O2 -g'
CGO_FFLAGS='-O2 -g'
CGO_LDFLAGS='-O2 -g'
PKG_CONFIG='pkg-config'
GOGCCFLAGS='-fPIC -arch x86_64 -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -ffile-prefix-map=/var/folders/mn/7czq6y1x1v17_xhp8bbkgjj40000gn/T/go-build3360756410=/tmp/go-build -gno-record-gcc-switches -fno-common'

What did you do?

gomobile bind golang.org/x/mobile/bind/testdata/testpkg/javapkg Output
gomobile: go build -buildmode=c-shared -o=/var/folders/mn/7czq6y1x1v17_xhp8bbkgjj40000gn/T/gomobile-work-2014316781/android/src/main/jniLibs/arm64-v8a/libgojni.so ./gobind failed: exit status 1
gobind/classes_android.go:15:2: package Java is not in std (/usr/local/go/src/Java)
gobind/classes_android.go:25:8: package Java/java/beans/PropertyChangeEvent is not in std (/usr/local/go/src/Java/java/beans/PropertyChangeEvent)
gobind/classes_android.go:22:8: package Java/java/io/IOException is not in std (/usr/local/go/src/Java/java/io/IOException)
gobind/classes_android.go:21:8: package Java/java/io/InputStream is not in std (/usr/local/go/src/Java/java/io/InputStream)
gobind/classes_android.go:49:8: package Java/java/lang/CharSequence is not in std (/usr/local/go/src/Java/java/lang/CharSequence)
gobind/classes_android.go:27:8: package Java/java/lang/Character is not in std (/usr/local/go/src/Java/java/lang/Character)
gobind/classes_android.go:28:8: package Java/java/lang/Character/Subset is not in std (/usr/local/go/src/Java/java/lang/Character/Subset)
gobind/classes_android.go:36:8: package Java/java/lang/Float is not in std (/usr/local/go/src/Java/java/lang/Float)
gobind/classes_android.go:29:8: package Java/java/lang/Integer is not in std (/usr/local/go/src/Java/java/lang/Integer)
gobind/classes_android.go:19:8: package Java/java/lang/Object is not in std (/usr/local/go/src/Java/java/lang/Object)
gobind/classes_android.go:20:8: package Java/java/lang/Runnable is not in std (/usr/local/go/src/Java/java/lang/Runnable)
gobind/classes_android.go:35:8: package Java/java/lang/System is not in std (/usr/local/go/src/Java/java/lang/System)
gobind/classes_android.go:48:8: package Java/java/lang/Throwable is not in std (/usr/local/go/src/Java/java/lang/Throwable)
gobind/classes_android.go:32:8: package Java/java/net/Socket is not in std (/usr/local/go/src/Java/java/net/Socket)
gobind/classes_android.go:51:8: package Java/java/net/URL is not in std (/usr/local/go/src/Java/java/net/URL)
gobind/classes_android.go:34:8: package Java/java/nio/IntBuffer is not in std (/usr/local/go/src/Java/java/nio/IntBuffer)
gobind/classes_android.go:26:8: package Java/java/util/ArrayList is not in std (/usr/local/go/src/Java/java/util/ArrayList)
gobind/classes_android.go:30:8: package Java/java/util/BitSet is not in std (/usr/local/go/src/Java/java/util/BitSet)
gobind/classes_android.go:38:8: package Java/java/util/Collections is not in std (/usr/local/go/src/Java/java/util/Collections)
gobind/classes_android.go:50:8: package Java/java/util/List is not in std (/usr/local/go/src/Java/java/util/List)
gobind/classes_android.go:31:8: package Java/java/util/Random is not in std (/usr/local/go/src/Java/java/util/Random)
gobind/classes_android.go:23:8: package Java/java/util/concurrent/Future is not in std (/usr/local/go/src/Java/java/util/concurrent/Future)
gobind/classes_android.go:24:8: package Java/java/util/concurrent/TimeUnit is not in std (/usr/local/go/src/Java/java/util/concurrent/TimeUnit)
gobind/classes_android.go:37:8: package Java/java/util/jar/JarFile is not in std (/usr/local/go/src/Java/java/util/jar/JarFile)
gobind/classes_android.go:39:8: package Java/javapkg/GoArrayList is not in std (/usr/local/go/src/Java/javapkg/GoArrayList)
gobind/classes_android.go:40:8: package Java/javapkg/GoFuture is not in std (/usr/local/go/src/Java/javapkg/GoFuture)
gobind/classes_android.go:41:8: package Java/javapkg/GoInputStream is not in std (/usr/local/go/src/Java/javapkg/GoInputStream)
gobind/classes_android.go:42:8: package Java/javapkg/GoObject is not in std (/usr/local/go/src/Java/javapkg/GoObject)
gobind/classes_android.go:43:8: package Java/javapkg/GoPCE is not in std (/usr/local/go/src/Java/javapkg/GoPCE)
gobind/classes_android.go:44:8: package Java/javapkg/GoRand is not in std (/usr/local/go/src/Java/javapkg/GoRand)
gobind/classes_android.go:45:8: package Java/javapkg/GoRunnable is not in std (/usr/local/go/src/Java/javapkg/GoRunnable)
gobind/classes_android.go:46:8: package Java/javapkg/GoSubset is not in std (/usr/local/go/src/Java/javapkg/GoSubset)
gobind/classes_android.go:47:8: package Java/javapkg/NoargConstructor is not in std (/usr/local/go/src/Java/javapkg/NoargConstructor)
gobind/classes_android.go:33:8: package Java/javax/net/SocketFactory is not in std (/usr/local/go/src/Java/javax/net/SocketFactory)
/Users/builder/go/pkg/mod/golang.org/x/mobile@v0.0.0-20230531173138-3c911d8e3eda/bind/testdata/testpkg/javapkg/classes.go:8:2: package Java/java/beans is not in std (/usr/local/go/src/Java/java/beans)
/Users/builder/go/pkg/mod/golang.org/x/mobile@v0.0.0-20230531173138-3c911d8e3eda/bind/testdata/testpkg/javapkg/classes.go:9:2: package Java/java/io is not in std (/usr/local/go/src/Java/java/io)
/Users/builder/go/pkg/mod/golang.org/x/mobile@v0.0.0-20230531173138-3c911d8e3eda/bind/testdata/testpkg/javapkg/classes.go:11:2: package Java/java/lang is not in std (/usr/local/go/src/Java/java/lang)
/Users/builder/go/pkg/mod/golang.org/x/mobile@v0.0.0-20230531173138-3c911d8e3eda/bind/testdata/testpkg/javapkg/classes.go:16:2: package Java/java/net is not in std (/usr/local/go/src/Java/java/net)
/Users/builder/go/pkg/mod/golang.org/x/mobile@v0.0.0-20230531173138-3c911d8e3eda/bind/testdata/testpkg/javapkg/classes.go:17:2: package Java/java/nio is not in std (/usr/local/go/src/Java/java/nio)
/Users/builder/go/pkg/mod/golang.org/x/mobile@v0.0.0-20230531173138-3c911d8e3eda/bind/testdata/testpkg/javapkg/classes.go:18:2: package Java/java/util is not in std (/usr/local/go/src/Java/java/util)
/Users/builder/go/pkg/mod/golang.org/x/mobile@v0.0.0-20230531173138-3c911d8e3eda/bind/testdata/testpkg/javapkg/classes.go:19:2: package Java/java/util/concurrent is not in std (/usr/local/go/src/Java/java/util/concurrent)
/Users/builder/go/pkg/mod/golang.org/x/mobile@v0.0.0-20230531173138-3c911d8e3eda/bind/testdata/testpkg/javapkg/classes.go:20:2: package Java/javapkg is not in std (/usr/local/go/src/Java/javapkg)
/Users/builder/go/pkg/mod/golang.org/x/mobile@v0.0.0-20230531173138-3c911d8e3eda/bind/testdata/testpkg/javapkg/classes.go:21:2: package Java/javax/net is not in std (/usr/local/go/src/Java/javax/net)

gomobile bind golang.org/x/mobile/bind/testdata/testpkg/objcpkg Output

| -IntegerLiteral 0x7f82da2a1150 <col:103> 'int' 4608 |-EnumConstantDecl 0x7f82da2a1220 <line:87:5, col:111> col:5 NSUserActivityConnectionUnavailableError 'int' | -ConstantExpr 0x7f82da2a1200 col:111 'int'
| |-value: Int 4609
| -IntegerLiteral 0x7f82da2a11e0 <col:111> 'int' 4609 |-EnumConstantDecl 0x7f82da2a12b0 <line:88:5, col:115> col:5 NSUserActivityRemoteApplicationTimedOutError 'int' | -ConstantExpr 0x7f82da2a1290 col:115 'int'
| |-value: Int 4610
| -IntegerLiteral 0x7f82da2a1270 <col:115> 'int' 4610 |-EnumConstantDecl 0x7f82da2a1340 <line:89:5, col:113> col:5 NSUserActivityHandoffUserInfoTooLargeError 'int' | -ConstantExpr 0x7f82da2a1320 col:113 'int'
| |-value: Int 4611
| -IntegerLiteral 0x7f82da2a1300 <col:113> 'int' 4611 |-EnumConstantDecl 0x7f82da2a13d0 <line:91:5, col:97> col:5 NSUserActivityErrorMinimum 'int' | -ConstantExpr 0x7f82da2a13b0 col:97 'int'
| |-value: Int 4608
| -IntegerLiteral 0x7f82da2a1390 <col:97> 'int' 4608 |-EnumConstantDecl 0x7f82da2a1460 <line:92:5, col:97> col:5 NSUserActivityErrorMaximum 'int' | -ConstantExpr 0x7f82da2a1440 col:97 'int'
| |-value: Int 4863
| -IntegerLiteral 0x7f82da2a1420 <col:97> 'int' 4863 |-EnumConstantDecl 0x7f82da2a14f0 <line:94:5, col:94> col:5 NSCoderReadCorruptError 'int' | -ConstantExpr 0x7f82da2a14d0 col:94 'int'
| |-value: Int 4864
| -IntegerLiteral 0x7f82da2a14b0 <col:94> 'int' 4864 |-EnumConstantDecl 0x7f82da2a1580 <line:95:5, col:96> col:5 NSCoderValueNotFoundError 'int' | -ConstantExpr 0x7f82da2a1560 col:96 'int'
| |-value: Int 4865
| -IntegerLiteral 0x7f82da2a1540 <col:96> 'int' 4865 |-EnumConstantDecl 0x7f82da2a1610 <line:96:5, col:97> col:5 NSCoderInvalidValueError 'int' | -ConstantExpr 0x7f82da2a15f0 col:97 'int'
| |-value: Int 4866
| -IntegerLiteral 0x7f82da2a15d0 <col:97> 'int' 4866 |-EnumConstantDecl 0x7f82da2a16a0 <line:97:5, col:90> col:5 NSCoderErrorMinimum 'int' | -ConstantExpr 0x7f82da2a1680 col:90 'int'
| |-value: Int 4864
| -IntegerLiteral 0x7f82da2a1660 <col:90> 'int' 4864 |-EnumConstantDecl 0x7f82da2a1730 <line:98:5, col:90> col:5 NSCoderErrorMaximum 'int' | -ConstantExpr 0x7f82da2a1710 col:90 'int'
| |-value: Int 4991
| -IntegerLiteral 0x7f82da2a16f0 <col:90> 'int' 4991 |-EnumConstantDecl 0x7f82da2a17c0 <line:100:5, col:91> col:5 NSBundleErrorMinimum 'int' | -ConstantExpr 0x7f82da2a17a0 col:91 'int'
| |-value: Int 4992
| -IntegerLiteral 0x7f82da2a1780 <col:91> 'int' 4992 |-EnumConstantDecl 0x7f82da2a1850 <line:101:5, col:91> col:5 NSBundleErrorMaximum 'int' | -ConstantExpr 0x7f82da2a1830 col:91 'int'
| |-value: Int 5119
| -IntegerLiteral 0x7f82da2a1810 <col:91> 'int' 5119 |-EnumConstantDecl 0x7f82da2a18e0 <line:103:5, col:110> col:5 NSBundleOnDemandResourceOutOfSpaceError 'int' | -ConstantExpr 0x7f82da2a18c0 col:110 'int'
| |-value: Int 4992
| -IntegerLiteral 0x7f82da2a18a0 <col:110> 'int' 4992 |-EnumConstantDecl 0x7f82da2a1970 <line:104:5, col:119> col:5 NSBundleOnDemandResourceExceededMaximumSizeError 'int' | -ConstantExpr 0x7f82da2a1950 col:119 'int'
| |-value: Int 4993
| -IntegerLiteral 0x7f82da2a1930 <col:119> 'int' 4993 |-EnumConstantDecl 0x7f82da2aaa00 <line:105:5, col:110> col:5 NSBundleOnDemandResourceInvalidTagError 'int' | -ConstantExpr 0x7f82da2a19e0 col:110 'int'
| |-value: Int 4994
| -IntegerLiteral 0x7f82da2a19c0 <col:110> 'int' 4994 |-EnumConstantDecl 0x7f82da2aaa90 <line:107:5, col:112> col:5 NSCloudSharingNetworkFailureError 'int' | -ConstantExpr 0x7f82da2aaa70 col:112 'int'
| |-value: Int 5120
| -IntegerLiteral 0x7f82da2aaa50 <col:112> 'int' 5120 |-EnumConstantDecl 0x7f82da2aab20 <line:108:5, col:111> col:5 NSCloudSharingQuotaExceededError 'int' | -ConstantExpr 0x7f82da2aab00 col:111 'int'
| |-value: Int 5121
| -IntegerLiteral 0x7f82da2aaae0 <col:111> 'int' 5121 |-EnumConstantDecl 0x7f82da2aabb0 <line:109:5, col:117> col:5 NSCloudSharingTooManyParticipantsError 'int' | -ConstantExpr 0x7f82da2aab90 col:117 'int'
| |-value: Int 5122
| -IntegerLiteral 0x7f82da2aab70 <col:117> 'int' 5122 |-EnumConstantDecl 0x7f82da2aac40 <line:110:5, col:106> col:5 NSCloudSharingConflictError 'int' | -ConstantExpr 0x7f82da2aac20 col:106 'int'
| |-value: Int 5123
| -IntegerLiteral 0x7f82da2aac00 <col:106> 'int' 5123 |-EnumConstantDecl 0x7f82da2aacd0 <line:111:5, col:110> col:5 NSCloudSharingNoPermissionError 'int' | -ConstantExpr 0x7f82da2aacb0 col:110 'int'
| |-value: Int 5124
| -IntegerLiteral 0x7f82da2aac90 <col:110> 'int' 5124 |-EnumConstantDecl 0x7f82da2aad60 <line:112:5, col:103> col:5 NSCloudSharingOtherError 'int' | -ConstantExpr 0x7f82da2aad40 col:103 'int'
| |-value: Int 5375
| -IntegerLiteral 0x7f82da2aad20 <col:103> 'int' 5375 |-EnumConstantDecl 0x7f82da2aadf0 <line:114:5, col:105> col:5 NSCloudSharingErrorMinimum 'int' | -ConstantExpr 0x7f82da2aadd0 col:105 'int'
| |-value: Int 5120
| -IntegerLiteral 0x7f82da2aadb0 <col:105> 'int' 5120 |-EnumConstantDecl 0x7f82da2aae80 <line:115:5, col:105> col:5 NSCloudSharingErrorMaximum 'int' | -ConstantExpr 0x7f82da2aae60 col:105 'int'
| |-value: Int 5375
| -IntegerLiteral 0x7f82da2aae40 <col:105> 'int' 5375 |-EnumConstantDecl 0x7f82da2aaf10 <line:117:5, col:97> col:5 NSCompressionFailedError 'int' | -ConstantExpr 0x7f82da2aaef0 col:97 'int'
| |-value: Int 5376
| -IntegerLiteral 0x7f82da2aaed0 <col:97> 'int' 5376 |-EnumConstantDecl 0x7f82da2aafa0 <line:118:5, col:99> col:5 NSDecompressionFailedError 'int' | -ConstantExpr 0x7f82da2aaf80 col:99 'int'
| |-value: Int 5377
| -IntegerLiteral 0x7f82da2aaf60 <col:99> 'int' 5377 |-EnumConstantDecl 0x7f82da2ab030 <line:120:5, col:98> col:5 NSCompressionErrorMinimum 'int' | -ConstantExpr 0x7f82da2ab010 col:98 'int'
| |-value: Int 5376
| -IntegerLiteral 0x7f82da2aaff0 <col:98> 'int' 5376 -EnumConstantDecl 0x7f82da2ab0c0 <line:121:5, col:98> col:5 NSCompressionErrorMaximum 'int'
-ConstantExpr 0x7f82da2ab0a0 <col:98> 'int' |-value: Int 5503 -IntegerLiteral 0x7f82da2ab080 col:98 'int' 5503

What did you expect to see?

build success

What did you see instead?

android and ios both failed

@no-bibi no-bibi changed the title affected/package: x/mobile: reverse binding testdata build failed Aug 18, 2023
@gopherbot gopherbot added the mobile Android, iOS, and x/mobile label Aug 18, 2023
@gopherbot gopherbot added this to the Unreleased milestone Aug 18, 2023
@no-bibi
Copy link
Author

no-bibi commented Aug 18, 2023

both java and xcode is installed

java -version

java version "20.0.2" 2023-07-18
Java(TM) SE Runtime Environment (build 20.0.2+9-78)
Java HotSpot(TM) 64-Bit Server VM (build 20.0.2+9-78, mixed mode, sharing)

@bcmills
Copy link
Contributor

bcmills commented Aug 18, 2023

(CC @golang/android @golang/ios)

@dmitshur dmitshur added the NeedsInvestigation Someone must examine and confirm this is a valid issue and not a duplicate of an existing one. label Aug 18, 2023
@yfwz100
Copy link

yfwz100 commented Sep 18, 2023

It may be related to go module feature.

The reverse binding procedure can be symplified as following:

  1. find reverse import references in the source;
  2. generate missing stub for reverse reference in temporary source folder (under the name of Java);
  3. add the current temporary path to GOPATH(so the source could be referenced by Java/...);
  4. generate go.mod if go module is enabled;
  5. run go build.

However, when go module is enabled(step 4 is generated), step 3 is useless because gopath will be ignored so the generated sources can only be referred to gobind/Java/... instead of Java/....

@MagicalTux
Copy link

This means that the whole reverse binding feature is broken with go modules? Is there any workaround?

@MagicalTux
Copy link

MagicalTux commented Nov 5, 2023

I created a test.go file with:

package gomobiletest

import (
	"Java/java/util/jar/JarFile"
)

func ManifestName() string {
	return JarFile.MANIFEST_NAME
}

and go.mod:

module example.com/gomobiletest

go 1.21.3

require (
	golang.org/x/mobile v0.0.0-20231006135142-2b44d11868fe // indirect
	golang.org/x/mod v0.13.0 // indirect
	golang.org/x/sys v0.13.0 // indirect
	golang.org/x/tools v0.14.0 // indirect
)

Then ran gomobile bind -v -target android -androidapi 21 -work

Output:

write /tmp/gomobile-work-265311568/src-android-amd64/go.mod
write /tmp/gomobile-work-265311568/src-android-arm64/go.mod
write /tmp/gomobile-work-265311568/src-android-arm/go.mod
write /tmp/gomobile-work-265311568/src-android-386/go.mod
go: found example.com/gomobiletest in example.com/gomobiletest v0.0.0-00010101000000-000000000000
unused github.com/yuin/goldmark
unused golang.org/x/exp/shiny
unused golang.org/x/image
unused golang.org/x/mod
unused golang.org/x/net
unused golang.org/x/sync
unused golang.org/x/sys
unused golang.org/x/tools
WORK=/tmp/gomobile-work-265311568/go-build4207933362
gobind/classes_android.go:15:2: package Java is not in std (/usr/lib/go/src/Java)
gobind/classes_android.go:19:8: package Java/java/util/jar/JarFile is not in std (/usr/lib/go/src/Java/java/util/jar/JarFile)
go: found example.com/gomobiletest in example.com/gomobiletest v0.0.0-00010101000000-000000000000
go: found example.com/gomobiletest in example.com/gomobiletest v0.0.0-00010101000000-000000000000
unused github.com/yuin/goldmark
unused golang.org/x/exp/shiny
unused github.com/yuin/goldmark
unused golang.org/x/image
unused golang.org/x/exp/shiny
unused golang.org/x/mod
unused golang.org/x/image
unused golang.org/x/net
unused golang.org/x/mod
unused golang.org/x/sync
unused golang.org/x/net
unused golang.org/x/sys
unused golang.org/x/sync
unused golang.org/x/tools
unused golang.org/x/sys
unused golang.org/x/tools
WORK=/tmp/gomobile-work-265311568/go-build4069625248
WORK=/tmp/gomobile-work-265311568/go-build2467336735
gobind/classes_android.go:15:2: package Java is not in std (/usr/lib/go/src/Java)
gobind/classes_android.go:19:8: package Java/java/util/jar/JarFile is not in std (/usr/lib/go/src/Java/java/util/jar/JarFile)
gobind/classes_android.go:15:2: package Java is not in std (/usr/lib/go/src/Java)
gobind/classes_android.go:19:8: package Java/java/util/jar/JarFile is not in std (/usr/lib/go/src/Java/java/util/jar/JarFile)
go: found example.com/gomobiletest in example.com/gomobiletest v0.0.0-00010101000000-000000000000
unused github.com/yuin/goldmark
unused golang.org/x/exp/shiny
unused golang.org/x/image
unused golang.org/x/mod
unused golang.org/x/net
unused golang.org/x/sync
unused golang.org/x/sys
unused golang.org/x/tools
WORK=/tmp/gomobile-work-265311568/go-build1171008369
gobind/classes_android.go:15:2: package Java is not in std (/usr/lib/go/src/Java)
gobind/classes_android.go:19:8: package Java/java/util/jar/JarFile is not in std (/usr/lib/go/src/Java/java/util/jar/JarFile)
WORK=/tmp/gomobile-work-265311568
gomobile: go build -v -work -buildmode=c-shared -o=/tmp/gomobile-work-265311568/android/src/main/jniLibs/x86/libgojni.so ./gobind failed: exit status 1

Temp file list:

/tmp/gomobile-work-265311568/
/tmp/gomobile-work-265311568/src-android-arm
/tmp/gomobile-work-265311568/src-android-arm/gobind
/tmp/gomobile-work-265311568/src-android-arm/gobind/seq.h
/tmp/gomobile-work-265311568/src-android-arm/gobind/seq_android.h
/tmp/gomobile-work-265311568/src-android-arm/gobind/seq_android.c
/tmp/gomobile-work-265311568/src-android-arm/gobind/universe.h
/tmp/gomobile-work-265311568/src-android-arm/gobind/classes_android.go
/tmp/gomobile-work-265311568/src-android-arm/gobind/gomobiletest_android.h
/tmp/gomobile-work-265311568/src-android-arm/gobind/seq.go
/tmp/gomobile-work-265311568/src-android-arm/gobind/classes.h
/tmp/gomobile-work-265311568/src-android-arm/gobind/go_main.go
/tmp/gomobile-work-265311568/src-android-arm/gobind/universe_android.c
/tmp/gomobile-work-265311568/src-android-arm/gobind/classes_android.c
/tmp/gomobile-work-265311568/src-android-arm/gobind/universe_android.h
/tmp/gomobile-work-265311568/src-android-arm/gobind/gomobiletest.h
/tmp/gomobile-work-265311568/src-android-arm/gobind/gomobiletest_android.c
/tmp/gomobile-work-265311568/src-android-arm/gobind/seq_android.go
/tmp/gomobile-work-265311568/src-android-arm/gobind/go_gomobiletestmain.go
/tmp/gomobile-work-265311568/src-android-arm/Java
/tmp/gomobile-work-265311568/src-android-arm/Java/interfaces.go
/tmp/gomobile-work-265311568/src-android-arm/Java/java
/tmp/gomobile-work-265311568/src-android-arm/Java/java/util
/tmp/gomobile-work-265311568/src-android-arm/Java/java/util/jar
/tmp/gomobile-work-265311568/src-android-arm/Java/java/util/jar/JarFile
/tmp/gomobile-work-265311568/src-android-arm/Java/java/util/jar/JarFile/package.go
/tmp/gomobile-work-265311568/src-android-arm/Java/java/util/jar/package.go
/tmp/gomobile-work-265311568/src-android-arm/go.sum
/tmp/gomobile-work-265311568/src-android-arm/go.mod
/tmp/gomobile-work-265311568/src-android-386
/tmp/gomobile-work-265311568/src-android-386/gobind
/tmp/gomobile-work-265311568/src-android-386/gobind/seq.h
/tmp/gomobile-work-265311568/src-android-386/gobind/seq_android.h
/tmp/gomobile-work-265311568/src-android-386/gobind/seq_android.c
/tmp/gomobile-work-265311568/src-android-386/gobind/universe.h
/tmp/gomobile-work-265311568/src-android-386/gobind/classes_android.go
/tmp/gomobile-work-265311568/src-android-386/gobind/gomobiletest_android.h
/tmp/gomobile-work-265311568/src-android-386/gobind/seq.go
/tmp/gomobile-work-265311568/src-android-386/gobind/classes.h
/tmp/gomobile-work-265311568/src-android-386/gobind/go_main.go
/tmp/gomobile-work-265311568/src-android-386/gobind/universe_android.c
/tmp/gomobile-work-265311568/src-android-386/gobind/classes_android.c
/tmp/gomobile-work-265311568/src-android-386/gobind/universe_android.h
/tmp/gomobile-work-265311568/src-android-386/gobind/gomobiletest.h
/tmp/gomobile-work-265311568/src-android-386/gobind/gomobiletest_android.c
/tmp/gomobile-work-265311568/src-android-386/gobind/seq_android.go
/tmp/gomobile-work-265311568/src-android-386/gobind/go_gomobiletestmain.go
/tmp/gomobile-work-265311568/src-android-386/Java
/tmp/gomobile-work-265311568/src-android-386/Java/interfaces.go
/tmp/gomobile-work-265311568/src-android-386/Java/java
/tmp/gomobile-work-265311568/src-android-386/Java/java/util
/tmp/gomobile-work-265311568/src-android-386/Java/java/util/jar
/tmp/gomobile-work-265311568/src-android-386/Java/java/util/jar/JarFile
/tmp/gomobile-work-265311568/src-android-386/Java/java/util/jar/JarFile/package.go
/tmp/gomobile-work-265311568/src-android-386/Java/java/util/jar/package.go
/tmp/gomobile-work-265311568/src-android-386/go.sum
/tmp/gomobile-work-265311568/src-android-386/go.mod
/tmp/gomobile-work-265311568/go-build4207933362
/tmp/gomobile-work-265311568/src-android-amd64
/tmp/gomobile-work-265311568/src-android-amd64/gobind
/tmp/gomobile-work-265311568/src-android-amd64/gobind/seq.h
/tmp/gomobile-work-265311568/src-android-amd64/gobind/seq_android.h
/tmp/gomobile-work-265311568/src-android-amd64/gobind/seq_android.c
/tmp/gomobile-work-265311568/src-android-amd64/gobind/universe.h
/tmp/gomobile-work-265311568/src-android-amd64/gobind/classes_android.go
/tmp/gomobile-work-265311568/src-android-amd64/gobind/gomobiletest_android.h
/tmp/gomobile-work-265311568/src-android-amd64/gobind/seq.go
/tmp/gomobile-work-265311568/src-android-amd64/gobind/classes.h
/tmp/gomobile-work-265311568/src-android-amd64/gobind/go_main.go
/tmp/gomobile-work-265311568/src-android-amd64/gobind/universe_android.c
/tmp/gomobile-work-265311568/src-android-amd64/gobind/classes_android.c
/tmp/gomobile-work-265311568/src-android-amd64/gobind/universe_android.h
/tmp/gomobile-work-265311568/src-android-amd64/gobind/gomobiletest.h
/tmp/gomobile-work-265311568/src-android-amd64/gobind/gomobiletest_android.c
/tmp/gomobile-work-265311568/src-android-amd64/gobind/seq_android.go
/tmp/gomobile-work-265311568/src-android-amd64/gobind/go_gomobiletestmain.go
/tmp/gomobile-work-265311568/src-android-amd64/Java
/tmp/gomobile-work-265311568/src-android-amd64/Java/interfaces.go
/tmp/gomobile-work-265311568/src-android-amd64/Java/java
/tmp/gomobile-work-265311568/src-android-amd64/Java/java/util
/tmp/gomobile-work-265311568/src-android-amd64/Java/java/util/jar
/tmp/gomobile-work-265311568/src-android-amd64/Java/java/util/jar/JarFile
/tmp/gomobile-work-265311568/src-android-amd64/Java/java/util/jar/JarFile/package.go
/tmp/gomobile-work-265311568/src-android-amd64/Java/java/util/jar/package.go
/tmp/gomobile-work-265311568/src-android-amd64/go.sum
/tmp/gomobile-work-265311568/src-android-amd64/go.mod
/tmp/gomobile-work-265311568/go-build4069625248
/tmp/gomobile-work-265311568/src-android-arm64
/tmp/gomobile-work-265311568/src-android-arm64/gobind
/tmp/gomobile-work-265311568/src-android-arm64/gobind/seq.h
/tmp/gomobile-work-265311568/src-android-arm64/gobind/seq_android.h
/tmp/gomobile-work-265311568/src-android-arm64/gobind/seq_android.c
/tmp/gomobile-work-265311568/src-android-arm64/gobind/universe.h
/tmp/gomobile-work-265311568/src-android-arm64/gobind/classes_android.go
/tmp/gomobile-work-265311568/src-android-arm64/gobind/gomobiletest_android.h
/tmp/gomobile-work-265311568/src-android-arm64/gobind/seq.go
/tmp/gomobile-work-265311568/src-android-arm64/gobind/classes.h
/tmp/gomobile-work-265311568/src-android-arm64/gobind/go_main.go
/tmp/gomobile-work-265311568/src-android-arm64/gobind/universe_android.c
/tmp/gomobile-work-265311568/src-android-arm64/gobind/classes_android.c
/tmp/gomobile-work-265311568/src-android-arm64/gobind/universe_android.h
/tmp/gomobile-work-265311568/src-android-arm64/gobind/gomobiletest.h
/tmp/gomobile-work-265311568/src-android-arm64/gobind/gomobiletest_android.c
/tmp/gomobile-work-265311568/src-android-arm64/gobind/seq_android.go
/tmp/gomobile-work-265311568/src-android-arm64/gobind/go_gomobiletestmain.go
/tmp/gomobile-work-265311568/src-android-arm64/Java
/tmp/gomobile-work-265311568/src-android-arm64/Java/interfaces.go
/tmp/gomobile-work-265311568/src-android-arm64/Java/java
/tmp/gomobile-work-265311568/src-android-arm64/Java/java/util
/tmp/gomobile-work-265311568/src-android-arm64/Java/java/util/jar
/tmp/gomobile-work-265311568/src-android-arm64/Java/java/util/jar/JarFile
/tmp/gomobile-work-265311568/src-android-arm64/Java/java/util/jar/JarFile/package.go
/tmp/gomobile-work-265311568/src-android-arm64/Java/java/util/jar/package.go
/tmp/gomobile-work-265311568/src-android-arm64/go.sum
/tmp/gomobile-work-265311568/src-android-arm64/go.mod
/tmp/gomobile-work-265311568/java
/tmp/gomobile-work-265311568/java/go
/tmp/gomobile-work-265311568/java/go/error.java
/tmp/gomobile-work-265311568/java/go/Seq.java
/tmp/gomobile-work-265311568/java/go/Universe.java
/tmp/gomobile-work-265311568/java/gomobiletest
/tmp/gomobile-work-265311568/java/gomobiletest/Gomobiletest.java
/tmp/gomobile-work-265311568/pkg
/tmp/gomobile-work-265311568/pkg/sumdb
/tmp/gomobile-work-265311568/pkg/sumdb/sum.golang.org
/tmp/gomobile-work-265311568/pkg/sumdb/sum.golang.org/latest
/tmp/gomobile-work-265311568/pkg/mod
/tmp/gomobile-work-265311568/pkg/mod/cache
/tmp/gomobile-work-265311568/pkg/mod/cache/download
/tmp/gomobile-work-265311568/pkg/mod/cache/download/golang.org
/tmp/gomobile-work-265311568/pkg/mod/cache/download/golang.org/x
/tmp/gomobile-work-265311568/pkg/mod/cache/download/golang.org/x/tools
/tmp/gomobile-work-265311568/pkg/mod/cache/download/golang.org/x/tools/@v
/tmp/gomobile-work-265311568/pkg/mod/cache/download/golang.org/x/tools/@v/v0.14.0.mod
/tmp/gomobile-work-265311568/pkg/mod/cache/download/golang.org/x/tools/@v/list
/tmp/gomobile-work-265311568/pkg/mod/cache/download/golang.org/x/sys
/tmp/gomobile-work-265311568/pkg/mod/cache/download/golang.org/x/sys/@v
/tmp/gomobile-work-265311568/pkg/mod/cache/download/golang.org/x/sys/@v/v0.13.0.mod
/tmp/gomobile-work-265311568/pkg/mod/cache/download/golang.org/x/sys/@v/list
/tmp/gomobile-work-265311568/pkg/mod/cache/download/golang.org/x/mobile
/tmp/gomobile-work-265311568/pkg/mod/cache/download/golang.org/x/mobile/@v
/tmp/gomobile-work-265311568/pkg/mod/cache/download/golang.org/x/mobile/@v/v0.0.0-20231006135142-2b44d11868fe.mod
/tmp/gomobile-work-265311568/pkg/mod/cache/download/golang.org/x/mobile/@v/list
/tmp/gomobile-work-265311568/pkg/mod/cache/download/golang.org/x/mod
/tmp/gomobile-work-265311568/pkg/mod/cache/download/golang.org/x/mod/@v
/tmp/gomobile-work-265311568/pkg/mod/cache/download/golang.org/x/mod/@v/v0.13.0.mod
/tmp/gomobile-work-265311568/pkg/mod/cache/download/golang.org/x/mod/@v/list
/tmp/gomobile-work-265311568/go-build1171008369
/tmp/gomobile-work-265311568/go-build2467336735
/tmp/gomobile-work-265311568/src
/tmp/gomobile-work-265311568/src/gobind
/tmp/gomobile-work-265311568/src/gobind/seq.h
/tmp/gomobile-work-265311568/src/gobind/seq_android.h
/tmp/gomobile-work-265311568/src/gobind/seq_android.c
/tmp/gomobile-work-265311568/src/gobind/universe.h
/tmp/gomobile-work-265311568/src/gobind/classes_android.go
/tmp/gomobile-work-265311568/src/gobind/gomobiletest_android.h
/tmp/gomobile-work-265311568/src/gobind/seq.go
/tmp/gomobile-work-265311568/src/gobind/classes.h
/tmp/gomobile-work-265311568/src/gobind/go_main.go
/tmp/gomobile-work-265311568/src/gobind/universe_android.c
/tmp/gomobile-work-265311568/src/gobind/classes_android.c
/tmp/gomobile-work-265311568/src/gobind/universe_android.h
/tmp/gomobile-work-265311568/src/gobind/gomobiletest.h
/tmp/gomobile-work-265311568/src/gobind/gomobiletest_android.c
/tmp/gomobile-work-265311568/src/gobind/seq_android.go
/tmp/gomobile-work-265311568/src/gobind/go_gomobiletestmain.go
/tmp/gomobile-work-265311568/src/Java
/tmp/gomobile-work-265311568/src/Java/interfaces.go
/tmp/gomobile-work-265311568/src/Java/java
/tmp/gomobile-work-265311568/src/Java/java/util
/tmp/gomobile-work-265311568/src/Java/java/util/jar
/tmp/gomobile-work-265311568/src/Java/java/util/jar/JarFile
/tmp/gomobile-work-265311568/src/Java/java/util/jar/JarFile/package.go
/tmp/gomobile-work-265311568/src/Java/java/util/jar/package.go

We can see files such as Java/java/util/jar/JarFile/package.go are generated.

Generated go.mod:

module gobind

go 1.21.3

replace example.com/gomobiletest => /tmp/gomobiletest

require (
        example.com/gomobiletest v0.0.0-00010101000000-000000000000
        golang.org/x/mobile v0.0.0-20231006135142-2b44d11868fe
)

It seems this could be fixed easily enough by having extra replaces/requires added for each imported Java package with the appropriate path? Or just something for "Java" ?

@MagicalTux
Copy link

MagicalTux commented Nov 5, 2023

This causes build to work, which is good for me:

diff --git a/cmd/gomobile/bind.go b/cmd/gomobile/bind.go
index fc9f756..a05001e 100644
--- a/cmd/gomobile/bind.go
+++ b/cmd/gomobile/bind.go
@@ -226,7 +226,7 @@ func packagesConfig(t targetInfo) *packages.Config {
 }
 
 // getModuleVersions returns a module information at the directory src.
-func getModuleVersions(targetPlatform string, targetArch string, src string) (*modfile.File, error) {
+func getModuleVersions(targetPlatform string, targetArch string, src string, dir string) (*modfile.File, error) {
        cmd := exec.Command("go", "list")
        cmd.Env = append(os.Environ(), "GOOS="+platformOS(targetPlatform), "GOARCH="+targetArch)
 
@@ -289,6 +289,17 @@ func getModuleVersions(targetPlatform string, targetArch string, src string) (*m
                }
        }
 
+       for _, subdir := range []string{"Java", "ObjC"} {
+               if _, err := os.Stat(filepath.Join(dir, subdir)); err == nil {
+                       if err := f.AddReplace(subdir, "", filepath.Join(dir, subdir), ""); err != nil {
+                               return nil, err
+                       }
+                       if err := os.WriteFile(filepath.Join(dir, subdir, "go.mod"), []byte("module "+subdir+"\n"), 0644); err != nil {
+                               return nil, err
+                       }
+               }
+       }
+
        v, err := ensureGoVersion()
        if err != nil {
                return nil, err
@@ -316,7 +327,7 @@ func writeGoMod(dir, targetPlatform, targetArch string) error {
        }
 
        return writeFile(filepath.Join(dir, "go.mod"), func(w io.Writer) error {
-               f, err := getModuleVersions(targetPlatform, targetArch, ".")
+               f, err := getModuleVersions(targetPlatform, targetArch, ".", dir)
                if err != nil {
                        return err
                }

@MagicalTux
Copy link

MagicalTux commented Nov 5, 2023

Actually it looks like this isn't fixed yet since there's a new error (but that may be because I'm on master of gomobile).

That error happens with javapkg, but it doesn't happen with my own code which now works properly thanks to golang/mobile#94

gomobile bind -v -target android -androidapi 21 golang.org/x/mobile/bind/testdata/testpkg/javapkg

[...]
javapkg/GoObject.java:41: error: method hashCode() is already defined in class GoObject
	@Override public int hashCode() {
	                     ^
1 error
gomobile: javac -d /tmp/gomobile-work-2467488846/javac-output -source 1.8 -target 1.8 -bootclasspath /home/magicaltux/Android/Sdk/platforms/android-33/android.jar go/Seq.java go/Universe.java go/error.java javapkg/GoArrayList.java javapkg/GoFuture.java javapkg/GoInputStream.java javapkg/GoObject.java javapkg/GoPCE.java javapkg/GoRand.java javapkg/GoRunnable.java javapkg/GoSubset.java javapkg/I.java javapkg/Javapkg.java javapkg/NoargConstructor.java failed: exit status 1

@Jipok
Copy link

Jipok commented Feb 4, 2024

I was able build my project with:

go get github.com/MagicalTux/mobile@fix-62142
cd ~/go/pkg/mod
cd 'github.com/!magical!tux/mobile@v0.0.0-20231105125928-8f28ed50ef5f'
go build -o ~/dev/my-android-project/ ./cmd/gomobile

Is there a chance that this will be fixed and I won’t have to use this crutch?
Is it just me or is gomobile development abandoned?

@Jipok
Copy link

Jipok commented Feb 4, 2024

@MagicalTux i can build project with:
import "Java/java/lang/System"
but when i try:
import "Java/android/content/pm/ApplicationInfo"
i got:
~/dev/...project.../backend/main.go:4:2: package Java/java/android/content/pm/ApplicationInfo is not in std (/usr/lib/go/src/Java/java/android/content/pm/ApplicationInfo)

@elvizlai
Copy link

elvizlai commented Apr 3, 2024

same issue:

package xyz

import "Java/java/lang/System"

var t = System.CurrentTimeMillis()

result:

gomobile: go build -buildmode=c-shared -o=/var/folders/51/mx0nwcms55n6p3_hwmr8y8lm0000gn/T/gomobile-work-3318798898/android/src/main/jniLibs/x86/libgojni.so ./gobind failed: exit status 1
gobind/classes_android.go:15:2: package Java is not in std (/Users/elvizlai/.g/go/src/Java)
gobind/classes_android.go:19:8: package Java/java/lang/System is not in std (/Users/elvizlai/.g/go/src/Java/java/lang/System)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
mobile Android, iOS, and x/mobile NeedsInvestigation Someone must examine and confirm this is a valid issue and not a duplicate of an existing one.
Projects
None yet
Development

No branches or pull requests

8 participants