diff --git a/docs/android_zt_sdk.md b/docs/android_zt_sdk.md index e19cd3f..de5f92d 100644 --- a/docs/android_zt_sdk.md +++ b/docs/android_zt_sdk.md @@ -23,13 +23,14 @@ In this example we aim to set up a minimal [Android Studio](https://developer.an ``` package ZeroTierSDK; -public class ZeroTierSDK_Wrapper { +public class ZeroTierSDK { public native void startOneService(); static { System.loadLibrary("ZeroTierOneJNI"); } // Loads JNI code } ``` - And now, start the service: + ``` new Thread(new Runnable() { public void run() { @@ -55,3 +56,11 @@ new Thread(new Runnable() { **Step 6: Join a network!** - Simply call `zt_join_network("XXXXXXXXXXXXXXXX")` + + + +*** + +*Note for the curious on JNI naming conventions: In order to reference a symbol in the JNI library you need to structure the package and class in your Android Studio project in a very particular way. For example, in the ZeroTierSDK we define a function called `Java_ZeroTier_SDK_startOneService`, the name can be broken down as follows: `Java_PACKAGENAME_CLASSNAME_startOneService`, so as we've defined it, you must create a package called `ZeroTier` and add a class called `SDK`.* + + diff --git a/integrations/android/example_app/app/build.gradle b/integrations/android/example_app/app/build.gradle index ec81786..ee857cf 100644 --- a/integrations/android/example_app/app/build.gradle +++ b/integrations/android/example_app/app/build.gradle @@ -4,7 +4,7 @@ android { compileSdkVersion 23 buildToolsVersion "23.0.3" defaultConfig { - applicationId "com.example.joseph.example_android_app" + applicationId "com.example.joseph.example_app" minSdkVersion 15 targetSdkVersion 23 versionCode 1 diff --git a/integrations/android/example_app/app/src/androidTest/java/com/example/joseph/example_android_app/ExampleInstrumentationTest.java b/integrations/android/example_app/app/src/androidTest/java/com/example/joseph/example_app/ExampleInstrumentationTest.java similarity index 83% rename from integrations/android/example_app/app/src/androidTest/java/com/example/joseph/example_android_app/ExampleInstrumentationTest.java rename to integrations/android/example_app/app/src/androidTest/java/com/example/joseph/example_app/ExampleInstrumentationTest.java index 449fb8e..9bf64aa 100644 --- a/integrations/android/example_app/app/src/androidTest/java/com/example/joseph/example_android_app/ExampleInstrumentationTest.java +++ b/integrations/android/example_app/app/src/androidTest/java/com/example/joseph/example_app/ExampleInstrumentationTest.java @@ -1,4 +1,4 @@ -package com.example.joseph.example_android_app; +package com.example.joseph.example_app; import android.content.Context; import android.support.test.InstrumentationRegistry; @@ -24,6 +24,6 @@ public class ExampleInstrumentationTest { // Context of the app under test. Context appContext = InstrumentationRegistry.getTargetContext(); - assertEquals("com.example.joseph.example_android_app", appContext.getPackageName()); + assertEquals("com.example.joseph.example_app", appContext.getPackageName()); } } \ No newline at end of file diff --git a/integrations/android/example_app/app/src/main/AndroidManifest.xml b/integrations/android/example_app/app/src/main/AndroidManifest.xml index 48d32c8..090b393 100644 --- a/integrations/android/example_app/app/src/main/AndroidManifest.xml +++ b/integrations/android/example_app/app/src/main/AndroidManifest.xml @@ -1,6 +1,6 @@ + package="com.example.joseph.example_app"> - - - - diff --git a/integrations/android/example_app/app/src/main/java/ZeroTierSDK/ZeroTierSDK/ZeroTierSDK.java b/integrations/android/example_app/app/src/main/java/SDK/SDK.java similarity index 65% rename from integrations/android/example_app/app/src/main/java/ZeroTierSDK/ZeroTierSDK/ZeroTierSDK.java rename to integrations/android/example_app/app/src/main/java/SDK/SDK.java index 8d416f9..2d354e6 100644 --- a/integrations/android/example_app/app/src/main/java/ZeroTierSDK/ZeroTierSDK/ZeroTierSDK.java +++ b/integrations/android/example_app/app/src/main/java/SDK/SDK.java @@ -1,5 +1,5 @@ -package ZeroTierSDK.ZeroTierSDK; -public class ZeroTierSDK { +package SDK; +public class SDK { public native void startOneService(); static { System.loadLibrary("ZeroTierOneJNI"); } // Loads JNI code } \ No newline at end of file diff --git a/integrations/android/example_app/app/src/main/java/com/example/joseph/example_android_app/MainActivity.java b/integrations/android/example_app/app/src/main/java/com/example/joseph/example_app/MainActivity.java similarity index 81% rename from integrations/android/example_app/app/src/main/java/com/example/joseph/example_android_app/MainActivity.java rename to integrations/android/example_app/app/src/main/java/com/example/joseph/example_app/MainActivity.java index 2099e6c..d44b559 100644 --- a/integrations/android/example_app/app/src/main/java/com/example/joseph/example_android_app/MainActivity.java +++ b/integrations/android/example_app/app/src/main/java/com/example/joseph/example_app/MainActivity.java @@ -1,8 +1,10 @@ -package com.example.joseph.example_android_app; +package com.example.joseph.example_app; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; +import SDK.SDK; + public class MainActivity extends AppCompatActivity { @Override @@ -12,10 +14,9 @@ public class MainActivity extends AppCompatActivity { new Thread(new Runnable() { public void run() { - ZeroTierSDK wrapper = new ZeroTierSDK(); + SDK wrapper = new SDK(); wrapper.startOneService(); // Calls to JNI code } }).start(); - } -} +} \ No newline at end of file diff --git a/integrations/android/example_app/app/src/main/res/layout/activity_main.xml b/integrations/android/example_app/app/src/main/res/layout/activity_main.xml index 754c23e..ce1cf4c 100644 --- a/integrations/android/example_app/app/src/main/res/layout/activity_main.xml +++ b/integrations/android/example_app/app/src/main/res/layout/activity_main.xml @@ -5,7 +5,7 @@ android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" - tools:context="com.example.joseph.example_android_app.MainActivity"> + tools:context="com.example.joseph.example_app.MainActivity"> - Example_Android_App + example_app diff --git a/integrations/android/example_app/app/src/test/java/com/example/joseph/example_android_app/ExampleUnitTest.java b/integrations/android/example_app/app/src/test/java/com/example/joseph/example_app/ExampleUnitTest.java similarity index 88% rename from integrations/android/example_app/app/src/test/java/com/example/joseph/example_android_app/ExampleUnitTest.java rename to integrations/android/example_app/app/src/test/java/com/example/joseph/example_app/ExampleUnitTest.java index 4448952..33fc216 100644 --- a/integrations/android/example_app/app/src/test/java/com/example/joseph/example_android_app/ExampleUnitTest.java +++ b/integrations/android/example_app/app/src/test/java/com/example/joseph/example_app/ExampleUnitTest.java @@ -1,4 +1,4 @@ -package com.example.joseph.example_android_app; +package com.example.joseph.example_app; import org.junit.Test; diff --git a/integrations/android/example_app/gradle.properties b/integrations/android/example_app/gradle.properties index 5eb079f..aac7c9b 100644 --- a/integrations/android/example_app/gradle.properties +++ b/integrations/android/example_app/gradle.properties @@ -11,9 +11,6 @@ # The setting is particularly useful for tweaking memory settings. org.gradle.jvmargs=-Xmx1536m -org.gradle.daemon=true -org.gradle.parallel=true - # When configured, Gradle will run in incubating parallel mode. # This option should only be used with decoupled projects. More details, visit # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects diff --git a/integrations/apple/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/project.xcworkspace/xcuserdata/Joseph.xcuserdatad/UserInterfaceState.xcuserstate b/integrations/apple/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/project.xcworkspace/xcuserdata/Joseph.xcuserdatad/UserInterfaceState.xcuserstate index d59d34f..73a9465 100644 Binary files a/integrations/apple/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/project.xcworkspace/xcuserdata/Joseph.xcuserdatad/UserInterfaceState.xcuserstate and b/integrations/apple/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/project.xcworkspace/xcuserdata/Joseph.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/make-mac.mk b/make-mac.mk index ce5a625..658715b 100644 --- a/make-mac.mk +++ b/make-mac.mk @@ -72,9 +72,11 @@ ios_unity3d_bundle: # Build JNI library for Android app integration android_jni_lib: cd integrations/android/android_jni_lib/proj; ./gradlew assembleDebug -# cd integrations/android/android_jni_lib/java/libs/; for f in *; do mv "$f" "android_jni_lib_$f"; done + # copy binary into example android project dir + cp integrations/android/android_jni_lib/java/libs/* build mv integrations/android/android_jni_lib/java/libs/* build - cp docs/android_zt_sdk.md build/README.md + cd build; for res_f in *; do mv "$res_f" "android_jni_lib_$res_f"; done + #cp docs/android_zt_sdk.md build/README.md osx_shared_lib: $(OBJS) rm -f *.o @@ -90,6 +92,10 @@ osx_shared_lib: $(OBJS) ln -sf zerotier-sdk-service zerotier-idtool cp docs/osx_zt_sdk.md build/osx_shared_lib/README.md + +prep: + cp integrations/android/android_jni_lib/java/libs/* build + check: ./check.sh build/lwip/liblwip.so @@ -113,6 +119,9 @@ check: ./check.sh build/ ./check.sh build/ +selftest: + + clean: rm -rf zerotier-cli zerotier-idtool diff --git a/src/SDK_ServiceSetup.hpp b/src/SDK_ServiceSetup.hpp index c144992..df09916 100644 --- a/src/SDK_ServiceSetup.hpp +++ b/src/SDK_ServiceSetup.hpp @@ -40,7 +40,7 @@ extern "C" { #define INTERCEPT_DISABLED 222 #if defined(__ANDROID__) - JNIEXPORT void JNICALL Java_ZeroTierSDK_startOneService(JNIEnv *env, jobject thisObj); + JNIEXPORT void JNICALL Java_ZeroTier_SDK_startOneService(JNIEnv *env, jobject thisObj); #else void *startOneService(void *thread_id); void init_service(int key, const char * path);