Rod Hynes 7f9e584417 New Android Library binary with recent changes and Go code fixes (https://github.com/golang/go/issues/9251 and https://github.com/golang/go/issues/9271) 11 yıl önce
..
go_psi 4419eb2d27 Add AndroidLibrary, a Java/Go binding that enables use of psiphon-tunnel-core within an Android app; modify sample AndroidApp to use AndroidLibrary (and remove embedded binary + subprocess method); move sample console app to its own subdir 11 yıl önce
java_golang 139deff442 Testing and bug fixes in progress 11 yıl önce
java_psi 4419eb2d27 Add AndroidLibrary, a Java/Go binding that enables use of psiphon-tunnel-core within an Android app; modify sample AndroidApp to use AndroidLibrary (and remove embedded binary + subprocess method); move sample console app to its own subdir 11 yıl önce
libpsi 4419eb2d27 Add AndroidLibrary, a Java/Go binding that enables use of psiphon-tunnel-core within an Android app; modify sample AndroidApp to use AndroidLibrary (and remove embedded binary + subprocess method); move sample console app to its own subdir 11 yıl önce
psi 4d718dea04 Explicit datastore initialization using filename in config 11 yıl önce
README.md 139deff442 Testing and bug fixes in progress 11 yıl önce
libgojni.so 7f9e584417 New Android Library binary with recent changes and Go code fixes (https://github.com/golang/go/issues/9251 and https://github.com/golang/go/issues/9271) 11 yıl önce

README.md

Psiphon Library for Android README

Overview

Psiphon Library for Android enables you to easily embed Psiphon in your Android app. The Psiphon Library for Android is implemented in Go and follows the standard conventions for using a Go library in an Android app.

Status

  • Pre-release

Building From Source

Follow Go Android documentation:

  • Overview README
  • Sample JNI App README
  • gobind documentation

    /AndroidLibrary
    README.md                - this file
    libgojni.so              - build binary output
    /psi
    psi.go                 - main library source
    /go_psi
    go_psi.go              - gobind output
    /java_psi/go/psi
    Psi.java               - gobind output
    /java_golang/go
    Go.java                - fork of Go/Java integration file
    Seq.java               - fork of Go/Java integration file
    /libpsi
    main.go                - stub main package for library
    

NOTE: may change after Go 1.4 is released.

  • Requires Go 1.4 or later
  • $GOPATH/bin/gobind -lang=go github.com/Psiphon-Labs/psiphon-tunnel-core/AndroidLibrary/psi > go_psi/go_psi.go
  • $GOPATH/bin/gobind -lang=java github.com/Psiphon-Labs/psiphon-tunnel-core/AndroidLibrary/psi > java_psi/go/psi/Psi.java
  • In /libpsi CGO_ENABLED=1 GOOS=android GOARCH=arm GOARM=7 go build -ldflags="-shared" and copy output file to gojni.so

Using

  1. Build from source or use the provided shared object binary and Java source files
  2. Add Go/Java integration files java_golang/go/*.java to your $src/go
  3. Add java_psi/go/psi/Psi.java to your $src/go/psi
  4. Add `gojni.so

NOTE: may change to Psiphon-specific library name and init.

AndroidApp README

See sample usage in Psiphon.java. Uses gobind conventions for data passing.

  1. Embed a config file
  2. Call Go.init(getApplicationContext()); in Application.onCreate()
  3. Extend Psi.Listener.Stub to receive messages in Message(String line)
  4. Call Psi.Start(configFile, Psi.Listener) to start Psiphon. Catch Exception to receive errors.
  5. Call Psi.Stop() to stop Psiphon.
  6. Sample shows how to monitor messages and detect which proxy ports to use and when the tunnel is active.

NOTE: may add more explicit interface for state change events.

Limitations

  • Only supports one concurrent instance of Psiphon.