unity集成外部包(4 android)
1.Unity调用函数
[DllImport("libtestgame.so")] private static extern void test(string test); public static void showTest(string title, string message, string positiveButton, string negativeButton) { if (Application.platform != RuntimePlatform.Android) { return; } test(message); }
2. 在eclipse里创建一个新的android的工程,包名跟unity是一致的。
3. jni 代码
1 #include <jni.h> 2 #include <stddef.h> 3 4 #ifdef __cplusplus 5 extern "C" { 6 #endif 7 8 // get JNIEnv pointer 9 JNIEnv* getEnv(); 10 11 // detach jni env 12 void detachEnv(); 13 14 void test(const char* testId); 15 #ifdef __cplusplus 16 } 17 #endif
1 void test(const char* testId) { 2 JNIEnv* env = getEnv(); 3 if (env == NULL) 4 return; 5 6 jobject wgWrapper = env->CallStaticObjectMethod(g_class_testgamewrapper, g_mid_getInstance); 7 8 jstring jtest = env->NewStringUTF(testId); 9 10 env->CallVoidMethod(tgWrapper, g_mid_opentest, jtest); 11 12 env->DeleteLocalRef(jtest); 13 }
4. 用ndk进行编译,产生libtestgame.so文件
5. 编译unity,产生apk
6. 解压之前产生的apk,把包里的assert和res下的文件copy到新的android的工程里。
7. 将classes.jar从unity那边copy到libs下,并加入你的外部包在这个目录下,
8. 删除之前android工程自动产生的activity;
9. 创建新activity继承与UnityPlayerActivity;
代码如下
//test.java //test activity public class test extends UnityPlayerActivity { protected void onCreate (Bundle savedInstanceState) { super.onCreate(savedInstanceState); } } //mytest.java public class mytest{ public void test (final String test) { Log.i("tttt", test); } }
10. 打包产生最终的apk