diff --git a/app/android.c b/app/android.c
index b677869..bde2592 100644
--- a/app/android.c
+++ b/app/android.c
@@ -15,6 +15,8 @@
 #define LOG_INFO(...) __android_log_print(ANDROID_LOG_INFO, "Go", __VA_ARGS__)
 #define LOG_FATAL(...) __android_log_print(ANDROID_LOG_FATAL, "Go", __VA_ARGS__)
 
+static jobject current_ctx;
+
 static jclass find_class(JNIEnv *env, const char *class_name) {
 	jclass clazz = (*env)->FindClass(env, class_name);
 	if (clazz == NULL) {
@@ -46,7 +48,7 @@
 	return JNI_VERSION_1_6;
 }
 
-int main_running = 0;
+static int main_running = 0;
 
 // Entry point from our subclassed NativeActivity.
 //
@@ -61,13 +63,12 @@
 		JNIEnv* env = activity->env;
 
 		// Note that activity->clazz is mis-named.
-		current_vm = activity->vm;
 		current_ctx = activity->clazz;
 
 		jclass clazz = (*env)->GetObjectClass(env, current_ctx);
 		key_rune_method = find_method(env, clazz, "getRune", "(III)I");
 
-		setCurrentContext(current_vm, (*env)->NewGlobalRef(env, current_ctx));
+		setCurrentContext(activity->vm, (*env)->NewGlobalRef(env, current_ctx));
 
 		// Set TMPDIR.
 		jmethodID gettmpdir = find_method(env, clazz, "getTmpdir", "()Ljava/lang/String;");
@@ -111,7 +112,7 @@
 }
 
 // TODO(crawshaw): Test configuration on more devices.
-const EGLint RGB_888[] = {
+static const EGLint RGB_888[] = {
 	EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
 	EGL_SURFACE_TYPE, EGL_WINDOW_BIT,
 	EGL_BLUE_SIZE, 8,
@@ -125,7 +126,7 @@
 EGLDisplay display = NULL;
 EGLSurface surface = NULL;
 
-char* initEGLDisplay() {
+static char* initEGLDisplay() {
 	display = eglGetDisplay(EGL_DEFAULT_DISPLAY);
 	if (!eglInitialize(display, 0, 0)) {
 		return "EGL initialize failed";
diff --git a/app/android.go b/app/android.go
index 883a93c..27e33d4 100644
--- a/app/android.go
+++ b/app/android.go
@@ -35,15 +35,9 @@
 #include <pthread.h>
 #include <stdlib.h>
 
-JavaVM* current_vm;
-jobject current_ctx;
-
-jclass app_find_class(JNIEnv* env, const char* name);
-
 EGLDisplay display;
 EGLSurface surface;
 
-char* initEGLDisplay();
 char* createEGLSurface(ANativeWindow* window);
 char* destroyEGLSurface();
 int32_t getKeyRune(JNIEnv* env, AInputEvent* e);
diff --git a/internal/mobileinit/ctx_android.go b/internal/mobileinit/ctx_android.go
index e0dc166..b58881a 100644
--- a/internal/mobileinit/ctx_android.go
+++ b/internal/mobileinit/ctx_android.go
@@ -8,30 +8,19 @@
 #include <jni.h>
 #include <stdlib.h>
 
-// current_vm is stored to initialize other cgo packages.
-//
-// As all the Go packages in a program form a single shared library,
-// there can only be one JNI_OnLoad function for initialization. In
-// OpenJDK there is JNI_GetCreatedJavaVMs, but this is not available
-// on android.
-JavaVM* current_vm;
-
-// current_ctx is Android's android.context.Context. May be NULL.
-jobject current_ctx;
-
-char* lockJNI(uintptr_t* envp, int* attachedp) {
+static char* lockJNI(JavaVM *vm, uintptr_t* envp, int* attachedp) {
 	JNIEnv* env;
 
-	if (current_vm == NULL) {
+	if (vm == NULL) {
 		return "no current JVM";
 	}
 
 	*attachedp = 0;
-	switch ((*current_vm)->GetEnv(current_vm, (void**)&env, JNI_VERSION_1_6)) {
+	switch ((*vm)->GetEnv(vm, (void**)&env, JNI_VERSION_1_6)) {
 	case JNI_OK:
 		break;
 	case JNI_EDETACHED:
-		if ((*current_vm)->AttachCurrentThread(current_vm, &env, 0) != 0) {
+		if ((*vm)->AttachCurrentThread(vm, &env, 0) != 0) {
 			return "cannot attach to JVM";
 		}
 		*attachedp = 1;
@@ -46,7 +35,7 @@
 	return NULL;
 }
 
-char* checkException(uintptr_t jnienv) {
+static char* checkException(uintptr_t jnienv) {
 	jthrowable exc;
 	JNIEnv* env = (JNIEnv*)jnienv;
 
@@ -63,8 +52,8 @@
 	return (char*)(*env)->GetStringUTFChars(env, msgStr, 0);
 }
 
-void unlockJNI() {
-	(*current_vm)->DetachCurrentThread(current_vm);
+static void unlockJNI(JavaVM *vm) {
+	(*vm)->DetachCurrentThread(vm);
 }
 */
 import "C"
@@ -75,12 +64,23 @@
 	"unsafe"
 )
 
+// currentVM is stored to initialize other cgo packages.
+//
+// As all the Go packages in a program form a single shared library,
+// there can only be one JNI_OnLoad function for initialization. In
+// OpenJDK there is JNI_GetCreatedJavaVMs, but this is not available
+// on android.
+var currentVM *C.JavaVM
+
+// currentCtx is Android's android.context.Context. May be NULL.
+var currentCtx C.jobject
+
 // SetCurrentContext populates the global Context object with the specified
 // current JavaVM instance (vm) and android.context.Context object (ctx).
 // The android.context.Context object must be a global reference.
 func SetCurrentContext(vm unsafe.Pointer, ctx uintptr) {
-	C.current_vm = (*C.JavaVM)(vm)
-	C.current_ctx = (C.jobject)(ctx)
+	currentVM = (*C.JavaVM)(vm)
+	currentCtx = (C.jobject)(ctx)
 }
 
 // RunOnJVM runs fn on a new goroutine locked to an OS thread with a JNIEnv.
@@ -99,16 +99,16 @@
 
 		env := C.uintptr_t(0)
 		attached := C.int(0)
-		if errStr := C.lockJNI(&env, &attached); errStr != nil {
+		if errStr := C.lockJNI(currentVM, &env, &attached); errStr != nil {
 			errch <- errors.New(C.GoString(errStr))
 			return
 		}
 		if attached != 0 {
-			defer C.unlockJNI()
+			defer C.unlockJNI(currentVM)
 		}
 
-		vm := uintptr(unsafe.Pointer(C.current_vm))
-		if err := fn(vm, uintptr(env), uintptr(C.current_ctx)); err != nil {
+		vm := uintptr(unsafe.Pointer(currentVM))
+		if err := fn(vm, uintptr(env), uintptr(currentCtx)); err != nil {
 			errch <- err
 			return
 		}
