You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
Go to file
Andrea Gottardo 1428c54e6c mdm: throw ErrNoSuchKey when a value not defined in Android syspolicy handler
Fixes tailscale/tailscale#11716

The implementation of the syspolicy handler on Android was incomplete. As explained in the comments (65f215115f/util/syspolicy/handler.go (L27)), a syspolicy handler should return a `syspolicy.ErrNoSuchKey` error when a value is not defined for a given key. The Android handler was instead returning an empty string.

When attempting to log in with a custom coordination server, since we were not returning syspolicy.ErrNoSuchKey, the caller into the syspolicy package (65f215115f/ipn/prefs.go (L665)) was always fetching an empty string from the MDM setting instead of using the default value `p.ControlURL`. Fallback logic would therefore always use the `DefaultControlURL` instead of the value defined in preferences.

Verified that upon specifying a custom coordination server in the app UI, a login screen for that coordination server appears and I can connect the Android device to that custom coordination server.

Signed-off-by: Andrea Gottardo <andrea@gottardo.me>
2 weeks ago
.github Makefile: clean up legacy builds (#316) 2 weeks ago
.vscode use network callback to update DNS config when network changes (#147) 3 months ago
android mdm: throw ErrNoSuchKey when a value not defined in Android syspolicy handler 2 weeks ago
android_legacy *: add a CI check for license headers and fix all files 2 months ago
cmd android: only reconfigure VPN when ready 3 weeks ago
libtailscale ui: port syspolicy handler code to new app (#304) 3 weeks ago
metadata/en-US metadata/en-US/images/phoneScreenshots: add screenshots for F-Droid 3 years ago
scripts *: add a CI check for license headers and fix all files 2 months ago
tool *: introduce tool/go following our common pattern 1 month ago
version version: handle whitespace in ${mod_version} (#141) 5 months ago
.gitignore android: add smoke test 3 weeks ago
Dockerfile Dockerfile: update to use go 1.22 (#163) 3 months ago
LICENSE all: initial commit 4 years ago
Makefile Makefile: clean up legacy builds (#316) 2 weeks ago
PATENTS all: initial commit 4 years ago
README.md android: use ktfmt formatting and use scaffold consistently across all views (#217) 1 month ago
eclipse-formatter.xml use network callback to update DNS config when network changes (#147) 3 months ago
flake.lock flake.*: add Nix support for establishing a development environment 2 years ago
flake.nix flake.*: add Nix support for establishing a development environment 2 years ago
go.mod go.mod: update for 1.65.0 (#319) 2 weeks ago
go.sum go.mod: update for 1.65.0 (#319) 2 weeks ago
go.toolchain.rev *: introduce tool/go following our common pattern 1 month ago

README.md

Tailscale Android Client

https://tailscale.com

Private WireGuard® networks made easy

Overview

This repository contains the open source Tailscale Android client.

Using

Get it on F-Droid Get it on Google Play

Preparing a build environment

There are several options for setting up a build environment. The Android Studio path is the most useful path for longer term development.

In all cases you will need:

  • Go runtime
  • Android SDK
  • Android SDK components (make androidsdk will install them)

Android Studio

  1. Install a Go runtime (https://go.dev/dl/).
  2. Install Android Studio (https://developer.android.com/studio).
  3. Start Android Studio, from the Welcome screen select "More Actions" and "SDK Manager".
  4. In the SDK manager, select the "SDK Tools" tab and install the "Android SDK Command-line Tools (latest)".
  5. Run make androidsdk to install the necessary SDK components.

If you would prefer to avoid Android Studio, you can also install an Android SDK. The makefile detects common paths, so sudo apt install android-sdk is sufficient on Debian / Ubuntu systems. To use an Android SDK installed in a non-standard location, set the ANDROID_SDK_ROOT environment variable to the path to the SDK.

If you installed Android Studio the tools may not be in your path. To get the correct tool path, run make androidpath and export the provided path in your shell.

Code Formatting

The ktmft plugin on the default setting should be used to autoformat all Java, Kotlin and XML files in Android Studio. Enable "Format on Save".

Docker

If you wish to avoid installing software on your host system, a Docker based development strategy is available, you can build and start a shell with:

make dockershell

Nix

If you have Nix 2.4 or later installed, a Nix development environment can be set up with:

alias nix='nix --extra-experimental-features "nix-command flakes"'
nix develop

Building

make apk
make install

Building a release

Use make tag_release to bump the Android version code, update the version name, and tag the current commit.

We only guarantee to support the latest Go release and any Go beta or release candidate builds (currently Go 1.14) in module mode. It might work in earlier Go versions or in GOPATH mode, but we're making no effort to keep those working.

Google Sign-In

Google Sign-In support relies on configuring a Google API Console project with the app identifier and signing key hashes. The official release uses the app identifier com.tailscale.ipn; custom builds should use a different identifier.

Running in the Android emulator

By default, the android emulator uses an older version of OpenGL ES, which results in a black screen when opening the Tailscale app. To fix this, with the emulator running:

  • Open the three-dots menu to access emulator settings
  • To to Settings > Advanced
  • Set "OpenGL ES API level" to "Renderer maximum (up to OpenGL ES 3.1)"
  • Close the emulator.
  • In Android Studio's emulator view (that lists all your emulated devices), hit the down arrow by the virtual device and select "Cold boot now" to restart the emulator from scratch.

The Tailscale app should now render correctly.

Additionally, there seems to be a bug that prevents using the system-level Google sign-in option (the one that pops up a system-level UI to select your Google account). You can work around this by selecting "Other" at the sign-in screen, and then selecting Google from the next screen.

Developing on a Fire Stick TV

On the Fire Stick:

  • Settings > My Fire TV > Developer Options > ADB Debugging > ON

Then some useful commands:

adb connect 10.2.200.213:5555
adb install -r tailscale-fdroid.apk
adb shell am start -n com.tailscale.ipn/com.tailscale.ipn.IPNActivity
adb shell pm uninstall com.tailscale.ipn

Bugs

Please file any issues about this code or the hosted service on the tailscale issue tracker.

Contributing

under_construction.gif

PRs welcome, but we are still working out our contribution process and tooling.

We require Developer Certificate of Origin Signed-off-by lines in commits.

About Us

We are apenwarr, bradfitz, crawshaw, danderson, dfcarney, from Tailscale Inc. You can learn more about us from our website.

WireGuard is a registered trademark of Jason A. Donenfeld.