Unity 调用android函数

时间:2022-01-31 18:47:55

//首先这是一个前沿

//我看了多的资料,还看了近半个小时的 android activity 的讲解

终于打出了apk

 

//接下来开始

 

//一步一步的跟着我走

1.创建一个android项目或者一个modudle 其项目类型为android library !android library ! android library !

2.包名可以是你的unity包名,也可以不是,反正放到unity需要查看那个 .xml 你的package

3.把 C:Program FilesUnityEditorDataPlaybackEnginesAndroidPlayerVariationsmonoReleaseClasses 中的class.jar

复制到你的android项目中的libs文件中

4.鼠标点击libs里的那个包并右键 -> Add as library //作用是添加此包的依赖

5.由于module类型为android library 所以没有主类文件和activity这个东东 所以没有主类文件和activity这个东东 所以没有主类文件和activity这个东东

重要的我说三遍

6.接下来创建一个主类,你可以自定义类名字,但最好跟着哥哥走

MainActivity.java

package com.aprivate.lib;
import android.app.Service;
import android.os.Bundle;
import android.os.Vibrator;
import  com.unity3d.player.UnityPlayerActivity;

public class MainActivity extends UnityPlayerActivity
{

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        //    setContentView(R.layout.activity_main);
    }

    public void OnAndroidVibrate(String str)
    {
        Vibrator m_vibrator = (Vibrator) getApplication().getSystemService(Service.VIBRATOR_SERVICE);
        m_vibrator.vibrate(10000);
    }

}

 

7.不要问为什么,这个功能是点击按钮手机震动

8.m_vibrator.vibrate(10000); 是要手机震动权限的 所以

 

// 再AndroidManifest.XML 中加入 <uses-permission android:name="android.permission.VIBRATE" />

// 不知道加再哪里的眼睛看过来

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.aprivate.lib" >

    <uses-permission android:name="android.permission.VIBRATE" />
    <application
        android:allowBackup = "true"
        android:label = "lib">
        <activity android:name=".MainActivity" android:label="lib">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

 

9.接下来搞得差不多了 请注意上面这个xml ,是有

<activity android:name=".MainActivity" android:label="lib">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

10.因为unity调用android时两个Activity 不要问为什么,i not no;

11.然后点击android studio 菜单栏中的 build -> make modudle ‘????‘

12.unity 要有这个路径 AssetsPluginsAndroid 没有的create

13.将build/outputs/arr/中的arr(用解压工具)中的libs 和 res 和 androidManifest.xml 和 classes.jar 复制到 unity AssetsPluginsAndroid 路径下

14.将外面大概2.0k 的 classes.jar  替换 libs中的.jar

15.至此 工程完成

16.写调用android中的函数

        AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
        if (jo != null)
        {
            m_text.text = "jo 不为null";

            jo.Call("OnAndroidVibrate", "12131");


        }
        else
        {
            m_text.text = "jo 为null";
        }

 

17. 我的测试成功 而且xml中的package 中的包和我unity中的包时不对应的

18.我的android library 的api等级要小于我的unity中的api等级

unity中的为 4.1 level 16

android中的则为 4.0

19 android 中的SDK 和 untiy 用的SDK时同一个

20. 如有不懂或者出错的 请评论