as导出jar到unity3d

2016-10-13 12:37:28 u012322710 阅读数 8922
  • Unity 值得看的500+ 技术内容列表

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

原创

【导出JAR包】

首先模块项目只能是library,而不能是application。如果除了打包代码还有资源的话,需要打包成aar包。

1、在app目录下的 build.gradle文件中 添下代码:

apply plugin: 'com.android.library'               //说明是Library模块

task makeJar(type: Copy) {                                         
    delete 'build/libs/mysdk.jar'                                  //下删除老的Jar包
    from('build/intermediates/bundles/release/')                   //从该地址复制
    into('build/libs/')                                            //复制到该地址
    include('classes.jar')                                         //包含文件
    rename ('classes.jar', 'myjar.jar')                            //重命名
}
makeJar.dependsOn(build)                                




2.在Android studio 的下面有 Terminal终端选项,输入命令行  gradlew makeJar   我第一次生成的时候下载了几分钟的东西,都是Gradle的一些依赖文件。
输入gradlew -v能看到gradle的版本

3.打包的JAR包只有代码,不包含资源,输出路径 mylibrary\build\libs


U3D使用Jar包

前提是,必须允许在安卓真机上,否者会报错Exception: JNI: Init'd AndroidJavaClass with null ptr!
当然也可以运行在虚拟机上,直接把APK拖到androidStudio的模拟器AVD上安装完运行就好了。

AndroidJavaClass类:
建立在AndroidJNIHelper的基础上

AndroidJavaObject类:
建立在AndroidJNI的基础上,是AndroidJavaClass的父类

第一种:直接调用Jar包里的函数。

1.先将jar包拖到Unity工程下的Plugins/Android目录内。
2.Unity写代码。
 AndroidJavaObject javaObj = new AndroidJavaObject("com.example.mylibrary.wode");    //获取Java Activity对象

 int a =  javaObj.Call<int>("add", 5, 10);                          //调用wode类里add方法,参数5,10 返回int值15



第二种:U3D和 AndroidStudio 交互。

1.新建一个AndroidStudio空项目,包名要和Unity3D的包名一样。


2.先导入UNITY编译安卓游戏所需要的Jar包,在u3d的安装目录下找到,并导入安卓工程。
如果用MONO:Unity5\Editor\Data\PlaybackEngines\androidplayer\Variations\mono\Release\Classes\
如果用il2cppUnity5\Editor\Data\PlaybackEngines\androidplayer\Variations\il2cpp\Release\Classes\   
il2cpp介绍:https://zhuanlan.zhihu.com/p/19972689

3.修改MainActivity
import com.unity3d.player.UnityPlayerActivity;

//继承自unity包的UnityPlayerActivity类
public class MainActivity extends UnityPlayerActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // setContentView(R.layout.activity_main);  注释掉 不显示View
    }
    
    //供U3D调用的方法
    public  int add(int a, int b)
    {
       return a+b;
    }
}

4.修改build.gradle模块文件
将模块转化为library,才能打Jar包      apply plugin: 'com.android.library'
去掉引用ID                            applicationId "com.zou.chongyang"
5.删除布局文件和单元测试。
//删除布局文件
删除activity_main.xml
//删除单元测试
删除androidTest和Test
//网上很多人说要删除掉,真的也得等正式发布的时候,开发的时候没必要。
//删除build.gradle里的依赖     这里要删的话,导出前删,否者会XML配置会报错
testCompile ‘junit:junit:4.12’ 
compile ‘com.android.support:appcompat-v7:23.1.0’


6.导出Jar包,讲Jar包和AndroidManifest.xml拖到Unity工程下的Plugins/Android目录内。

7.修改刚才放到U3D里的AndroidManifest.xml。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.zou.chongyang">    <!--改为包名-->
 

  <application
        android:theme="@style/UnityThemeSelector"
        android:icon="@drawable/app_icon"
        android:label="@string/app_name">
    <!--改为包名-->
    <activity android:name="com.zou.chongyang.MainActivity"           
              android:label="@string/app_name">
      <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
      <meta-data android:name="unityplayer.UnityActivity" android:value="true" />
    </activity>
  </application>

</manifest>



8.U3D调用android函数
        AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");   //获取unity的Java类,只能调用静态方法,获取静态属性
        AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");      //获取当前的Activity对象,能调用公开方法和公开属性

        int jieguo= jo.Call<int>("add",1999,388);             //调用add函数 返回计算结果

另外,安卓调用U3D的方法:
 //参数1:U3D物体名称   参数2:方法名   参数3:要传递的参数
UnityPlayer.UnitySendMessage("headImage","AndroidSaveHeadImageOver","headImage.png");
结束语:按照我的办法绝对是可以完成并且有用的,摸索了好久,看了很多篇文章,不是这里有问题就是哪里有问题,水平有限,主要对安卓不是很精通。
看起来步骤很多,其实我连续搞了十几遍,现在5分钟就能搞通了。
参考博客:
http://blog.csdn.net/or_7r_ccl/article/details/52443919
http://blog.csdn.net/yaoobs/article/details/51566480



                                    
2016-06-19 18:10:57 happy13451254794 阅读数 330
  • Unity 值得看的500+ 技术内容列表

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

Unity3d AndroidStudio 导出 jar

androidstudio 打包 jar 的各种坑

  1. 用 androidstudio 新建一个项目 此时注意 这一步需使用 Add No Activity 这个选项 这里写图片描述

2.项目建好后 添加 unity库 在unity安装目录下找到 classes.jar 看起来是这样这里写图片描述
ctrl+c 复制这个文件 ctrl+v 张贴文件到 androidstudio 的lib文件夹上 看起来是这样这里写图片描述
点击确定 选择刚才黏贴的 classes.jar 文件 右键 选择 Add as library 此时添加成功了unity的jar库 他会出现在build.gradle 文件的 dependencies 中这里写图片描述

3.新建一个 javaclass 文件 为了快速实现效果 可以黏贴一下代码 到新建的java文件

package com.example.chen.myapplication;
import android.app.AlertDialog;

import com.unity3d.player.UnityPlayer;
import com.unity3d.player.UnityPlayerActivity;

/**
 * Created by chen on 2016/6/19.
 */
public class dds extends UnityPlayerActivity
{
    public static void Show(final String title, final String content)
    {
        UnityPlayer.currentActivity.runOnUiThread(new Runnable() {
            public void run() {
                AlertDialog.Builder builder = new AlertDialog.Builder(UnityPlayer.currentActivity);
                builder.setTitle(title).setMessage(content).setCancelable(false).setPositiveButton("OK", null);
                builder.show();
            }
        });
    }
}

4.修改 bulid.gradle 内容 添加一下项

//注意 注意 这里是 libray 原来是 application 一定要改掉这里 否则会生成失败
apply plugin: 'com.android.library'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.3"

    defaultConfig {
        //这里原文件 的 applicationId 也要去掉![这里写图片描述](http://img.blog.csdn.net/20160619174956441)
        //applicationId "com.example.chen.myapplication"
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.1.1'
    compile files('libs/classes.jar')
}


//删除旧的jar包
task deleteOldJar(type: Delete) {
    delete 'release/AndroidPlugin.jar'
}

//到出jar包
task exportJar(type: Copy) {
    from('build/intermediates/bundles/release/')
    into('release/')
    include('classes.jar')
    //导出包重命名  注意 注意  这里如果不重命名 打包后会和unity的 classes.jar 资源重复 冲突
    rename('classes.jar', 'AndroidPlugin.jar')
}

exportJar.dependsOn(deleteOldJar, build)

5.build.gradle 改好后 就可以在Gradle 面板 的other 选项中找到 exportJar 这个任务 双击 即可生成jar文
这里写图片描述

6生成后即可在 项目的 release下面找到 生成完成的 AndroidPlugin.jar 文件 接下来在unity工程中 新建Plugins文件夹 plugins下面 再新建 Android文件夹 此时使用android代码 还需要在androidManifest中注册它 我们可以在unity 安装文件中找到 AndroidManifest这个文件 拷贝到 Android目录下这里写图片描述
在 AndroidManifest.xml 注册上 新建的javaclass 类这里写图片描述

7.在unity中 新建一个 c#脚本 代码如下

using UnityEngine;
using System.Collections;

public class AndroidDemo : MonoBehaviour
{

void OnGUI()
{
    // 通过API调用对话框  
    if (GUILayout.Button("调用安卓Jar中的函数 ShowDialog !", GUILayout.Height(50)))
    {
        // Android的Java接口  
        AndroidJavaClass jc = new AndroidJavaClass("com.example.chen.myapplication.dds");
        jc.CallStatic("Show", "hellow", "Test Message");
    }
}

}

8.在unity场景中任意挂一个 物体上 即可打包测试 结果如下图这里写图片描述

参考链接android studio 导出 jar

2019-06-04 18:01:00 weixin_34272308 阅读数 105
  • Unity 值得看的500+ 技术内容列表

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

环境 Android studio 3.4 + unity2018.3

1,android studio 新建空工程,一切默认,完成。
这个空工程只是个壳,它的所有参数都没什么用,它存在的意义是为了后面能创建 module。
因为JAVA不像C++,可以直接创建类库。
2,新建模块
file->new module->android library
application name 和 module name 都不重要,没有实际用处(这里取名mylibrary),重要的是包名: package name。
这里取名为 com.x.y
包名用到哪些地方?
(1,AndroidManifest.xml里的 package
(2,每个java文件的开始处,形如 package com.x.y,表示此java文件被放入了工程的com/x/y目录下
(3,unity 的build Settings里的 package name

这三处必须使用同一个包名,如果不一致则启动时闪退。如果想修改包名,就要修改这三处就行了。

3,在mylibrary模块下的src/java/com.x.y/添加java文件,随便取名,就叫MainActivity吧
修改其源码如下:

 

package com.x.y;

import android.content.Intent;
import com.unity3d.player.UnityPlayerActivity;
import android.app.Activity;
import android.os.Bundle;

public class MainActivity extends UnityPlayerActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.activity_main);
        activity = this;
    }

    //public  static  MainActivity activity;
    public static MainActivity activity;
    public int Calc(int x, int y){
        return  x + y;
    }

    public static float Calcf(float x, float y){
        return  x + y;
    }

    public void restartApplication() {
        new Thread(){
            public void run(){
                Intent launch=getBaseContext().getPackageManager().getLaunchIntentForPackage(getBaseContext().getPackageName());
                launch.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(launch);
                android.os.Process.killProcess(android.os.Process.myPid());
            }
        }.start();

        finish();
    }
}

 

这个类的目的:
(1,测试普通成员函数和静态函数的调用
(2,测试重启功能

4,修改mylibary模块的AndroidManifest.xml,这一步放在最后也行,此文件是拿给UNITY用的,内容如下:

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

<application android:allowBackup="true" android:label="@string/app_name">
<activity android:name=".MainActivity" android:label="@string/app_name">
<intent-filter>
  <action android:name="android.intent.action.MAIN"/>
  <category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>

</manifest>

 

注意一定要有下面两行
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
学过安卓开发的都知道这是标记此活动是主活动,没有主活动的应用是不会被运行的。
默认情况下UNITY会创建自己AndroidManifest.xml,一旦我们在Assets/Plugins/Android/下放置了我们自定的AndroidManifest.xml,
UNITY就以我们的配置为主,并将buildsettings里的相关配置合并进来,如安装位置,持久化路径等。
因此,如果我们生成了自己的AndroidManifest.xml,却又不配置为主活动,安装后桌面没有图标,因为它不是一个可执行程序

5,修改mylibrary模块的 build.gradle(注意不是修改工程的),为编译做准备,在末尾添加:

task exportJar(type: Copy) {
//必须先删除旧的包,否则新包不会生成,这个目录对应mylibrary/build/libs/AndroidUtils.jar
delete 'build/libs/AndroidUtils.jar'

//生成的目录在这里
from('build/intermediates/packaged-classes/release/')

//生成build/libs目录,并将build/intermediates/packaged-classes/release/下的classes.jar复制到此目录
into('build/libs/')

//指定我们只在build/intermediates/packaged-classes/release/下寻找classes.jar(放入到build/libs/目录
include('classes.jar')

//重命名下,起个个性的名字,不要与别人混淆
rename('classes.jar', 'AndroidUtils.jar')
}

//这里会触发真正对mylibaray的编译
exportJar.dependsOn(build)

 

然后点击工具栏上的 run anything: ,或双击ctrl,在弹出的输入窗口中输入 gradlew exprotJar,回车,等待编译完成。
如果没问题,会提示 BUILD SUCCESSFUL
如果出了错,仔细看前面的输出LOG。

这里的注意点:
(1,from('build/intermediates/packaged-classes/release/') 这里的路径在不同版本的 Android Studio中不同。
在低版本的AS中路径为 build/intermediates/bundles/release
如果编译中报错 exportJar: NO-SOURCE,就说明是此路径错误了,这时就去磁盘上的build/intermediates/目录搜索classes.jar文件,
找到它的路径,写入到from里就对了。

6,生成完成后,得到我们的AndroidUtils.jar包,新建UNITY工程,package name取名:com.x.y

在Assets下新建如下目录 Plugins/Android,然后将AndroidManifest.xml放入到此目录下,然后在创建 Plugins/Android/libs目录,
将AndroidUtils.jar放入此目录。
注意这里的目录结构要求:AndroidManifest.xml必须与libs同目录,AndroidUtils.jar必须在libs目录中,名字不能错。
但libs和XML不一定直接在Android下,可以是多层目录下,如:Android/abc/libs也可以

7,添加脚本,随便挂在什么上,如相机上,测试代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class calljava : MonoBehaviour
{
    AndroidJavaObject jo;
    Text info;

    void Start()
    {
        //方式一,使用基类,这种比较通用
        var jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
        info = GameObject.Find("TextInfo").GetComponent<Text>();
        info.text += "start \n";

        //方式二,使用具体类,不通用,当类名改了就要改这里的字符串
        //var jc = new AndroidJavaClass("com.example.mylibraryx.MainActivity");
        //jo = jc.GetStatic<AndroidJavaObject>("activity");

        info.text += "get java object " + (jo == null ? "null\n" : "ok\n");

        //var btn = GetComponent<Button>();
        //btn.onClick.AddListener(() =>
        //{
            if (jo != null)
            {
                //注意1,参数类型必须传对,否则运行到这里就出错了
                var ret = jo.Call<int>("Calc", 10, 20);
                info.text += "call ret : " + ret + " \n";

                //调用静态函数
                var retf = jo.CallStatic<float>("Calcf", (float)10.2, (float)20.2);
                info.text += "call retf : " + retf + " \n";


                //注意2,由于Calcf是个静态函数,非静态调用会造成参数错位,结果为retfx = 10.2
                var retfx = jo.Call<float>("Calcf", (float)10.2, (float)20.2);
                info.text += "call retfx : " + retfx + " \n";

            }

        //});
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

 

8,打包APK,到安卓上运行。在UNITY上运行会出错,提示jo为空.

 

转载于:https://www.cnblogs.com/timeObjserver/p/10975162.html

2018-09-17 16:23:46 qq_32605447 阅读数 278
  • Unity 值得看的500+ 技术内容列表

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

https://blog.csdn.net/u012322710/article/details/52790506

【导出JAR包】

首先模块项目只能是library,而不能是application。如果除了打包代码还有资源的话,需要打包成aar包。

1、在app目录下的 build.gradle文件中 添下代码:

apply plugin: 'com.android.library'               //说明是Library模块

task makeJar(type: Copy) {                                         
    delete 'build/libs/mysdk.jar'                                  //下删除老的Jar包
    from('build/intermediates/bundles/release/')                   //从该地址复制
    into('build/libs/')                                            //复制到该地址
    include('classes.jar')                                         //包含文件
    rename ('classes.jar', 'myjar.jar')                            //重命名
}
makeJar.dependsOn(build)                                

 

 

 

 
2.在Android studio 的下面有 Terminal终端选项,输入命令行  gradlew makeJar   我第一次生成的时候下载了几分钟的东西,都是Gradle的一些依赖文件。
输入gradlew -v能看到gradle的版本

 
3.打包的JAR包只有代码,不包含资源,输出路径 mylibrary\build\libs

 

 
【U3D使用Jar包】

 
前提是,必须允许在安卓真机上,否者会报错Exception: JNI: Init'd AndroidJavaClass with null ptr!
当然也可以运行在虚拟机上,直接把APK拖到androidStudio的模拟器AVD上安装完运行就好了。

 
AndroidJavaClass类:
建立在AndroidJNIHelper的基础上

 

 
AndroidJavaObject类:

 
建立在AndroidJNI的基础上,是AndroidJavaClass的父类

 
第一种:直接调用Jar包里的函数。

 

 

 
1.先将jar包拖到Unity工程下的Plugins/Android目录内。

2.Unity写代码。


 

 
  1. AndroidJavaObject javaObj = new AndroidJavaObject("com.example.mylibrary.wode"); //获取Java Activity对象

  2.  
  3. int a = javaObj.Call<int>("add", 5, 10); //调用wode类里add方法,参数5,10 返回int值15


 


 
第二种:U3D和 AndroidStudio 交互。

 
1.新建一个AndroidStudio空项目,包名要和Unity3D的包名一样。

 

 
2.先导入UNITY编译安卓游戏所需要的Jar包,在u3d的安装目录下找到,并导入安卓工程。
如果用MONO:Unity5\Editor\Data\PlaybackEngines\androidplayer\Variations\mono\Release\Classes\
如果用il2cpp:Unity5\Editor\Data\PlaybackEngines\androidplayer\Variations\il2cpp\Release\Classes\   

 
il2cpp介绍:https://zhuanlan.zhihu.com/p/19972689

 
3.修改MainActivity

 

 
  1. import com.unity3d.player.UnityPlayerActivity;

  2.  
  3. //继承自unity包的UnityPlayerActivity类

  4. public class MainActivity extends UnityPlayerActivity {

  5.  
  6. @Override

  7. protected void onCreate(Bundle savedInstanceState) {

  8. super.onCreate(savedInstanceState);

  9. // setContentView(R.layout.activity_main); 注释掉 不显示View

  10. }

  11.  
  12. //供U3D调用的方法

  13. public int add(int a, int b)

  14. {

  15. return a+b;

  16. }

  17. }


 
4.修改build.gradle模块文件

 
将模块转化为library,才能打Jar包      apply plugin: 'com.android.library'

 
去掉引用ID                            applicationId "com.zou.chongyang"

 
5.删除布局文件和单元测试。
//删除布局文件
删除activity_main.xml
//删除单元测试
删除androidTest和Test
//网上很多人说要删除掉,真的也得等正式发布的时候,开发的时候没必要。

 

 
//删除build.gradle里的依赖     这里要删的话,导出前删,否者会XML配置会报错
testCompile ‘junit:junit:4.12’ 
compile ‘com.android.support:appcompat-v7:23.1.0’

 


 
6.导出Jar包,讲Jar包和AndroidManifest.xml拖到Unity工程下的Plugins/Android目录内。

 
7.修改刚才放到U3D里的AndroidManifest.xml。

 

 

 

 

 
  1. <?xml version="1.0" encoding="utf-8"?>

  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"

  3. package="com.zou.chongyang"> <!--改为包名-->

  4.  
  5.  
  6. <application

  7. android:theme="@style/UnityThemeSelector"

  8. android:icon="@drawable/app_icon"

  9. android:label="@string/app_name">

  10. <!--改为包名-->

  11. <activity android:name="com.zou.chongyang.MainActivity"

  12. android:label="@string/app_name">

  13. <intent-filter>

  14. <action android:name="android.intent.action.MAIN" />

  15. <category android:name="android.intent.category.LAUNCHER" />

  16. </intent-filter>

  17. <meta-data android:name="unityplayer.UnityActivity" android:value="true" />

  18. </activity>

  19. </application>

  20.  
  21. </manifest>

 

 


 
8.U3D调用android函数

 

 
  1. AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); //获取unity的Java类,只能调用静态方法,获取静态属性

  2. AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity"); //获取当前的Activity对象,能调用公开方法和公开属性

  3.  
  4. int jieguo= jo.Call<int>("add",1999,388); //调用add函数 返回计算结果

 

另外,安卓调用U3D的方法:
 //参数1:U3D物体名称   参数2:方法名   参数3:要传递的参数
UnityPlayer.UnitySendMessage("headImage","AndroidSaveHeadImageOver","headImage.png");

 

 

 
结束语:按照我的办法绝对是可以完成并且有用的,摸索了好久,看了很多篇文章,不是这里有问题就是哪里有问题,水平有限,主要对安卓不是很精通。
看起来步骤很多,其实我连续搞了十几遍,现在5分钟就能搞通了。
2019-02-23 12:04:12 weixin_41743629 阅读数 480
  • Unity 值得看的500+ 技术内容列表

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

首先说一下我的开发环境:
Android Studio 3.13
Unity3D 2018.2.7
JDK:1.8.1
Android API:28

Android Studio端操作:
1、新建Android工程

  • 创建一个空工程

新建工程
最小API记得选API16
在这里插入图片描述
选择Empty Activity
在这里插入图片描述
其他设置可以默认,点击【finish】,创建一个新的工程
在这里插入图片描述

  • 新建一个Library module
    我们后面Unity3d中要使用的jar包就是从这个module导出

在这里插入图片描述
选择android library,再选择next
在这里插入图片描述
在这里插入图片描述
这个就是我们创建的模块:
在这里插入图片描述
为模块添加Unity中的classes.jar文件
找到Unity2018.2.7的安装位置中的classes.jar,复制这个jar文件:
在这里插入图片描述
将classes.jar粘贴到模块的libs文件夹下:
在这里插入图片描述
为模块添加classes.jar依赖:
右键选择模块设置:
在这里插入图片描述
添加classe.jar依赖
在这里插入图片描述
在这里插入图片描述

  • 在androidlibrary这个模块下新建Activity
    我们将在这个Activity调用Unity中的方法以及在这里提供方法让Unity调用
    在这里插入图片描述
    在这里插入图片描述
    可以默认设备,单击【finish]
    在这里插入图片描述

删除我们刚刚创建的activity_main.xml文件
在这里插入图片描述
在这里插入图片描述
修改模块中的MainAcitvity.java类,如下:
在这里插入图片描述
修改模块中的AndroidMainfest.xml文件,如下
在这里插入图片描述

  • 导出jar包
    在这里插入图片描述
    找到生成的classe.jar文件,替换原来的classe.jar
    在这里插入图片描述

在桌面新建一个文件夹temp,在temp里面再新建 libs文件夹和res文件夹
在这里插入图片描述
将生成的classes.jar文件拷贝到libs文件夹中:
在这里插入图片描述
将layout和values文件夹拷贝到res文件夹中:
在这里插入图片描述
在这里插入图片描述
将AndroidMainfest.xml文件拷贝到temp文件夹中:
在这里插入图片描述
在这里插入图片描述

修改这个AndoridMainfest.xml文件:

在这里插入图片描述
以上为Android 端的设置

Unity端操作

  • 将刚刚temp文件夹中的文件复制到Unity工程中:

在这里插入图片描述

  • 新建测试脚本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class UnityAndroidTest : MonoBehaviour {
    public Text resultText;

	// Use this for initialization
	void Start () {
        AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
        //调用android端的add方法
        int result = jo.Call<int>("add", 1, 2);
        resultText.text = result.ToString();
	}
	
	// Update is called once per frame
	void Update () {
		
	}

	/// <summary>
    /// 提供方法让android调用
    /// </summary>
    public void ChangeColor()
    {
        resultText.color = Color.red;
    }
}

unity build 设置
在这里插入图片描述
运行结果
在这里插入图片描述
真机运行得出红色的3,unity与android相互调用成功