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

posted @ 2013-03-01 14:07  jallen  阅读(235)  评论(0)    收藏  举报