- 效果
- 方式一
- android端
- 1、新建library库
- 2、复制jar包
- 3、android项目中引用jar包
- 4、新建activity类继承UnityPlayerActivity
- 5、修改库的清单文件AndroidManifest.xml
- 6、打aar包
- Unity端
- 1、新建文件夹,引入aar包
- 2、引入清单文件
- 注意1
- 3、写方法调用
- 4、修改unity的包名
- 5、 打包
- 方式二
- android端
- 1、新建library库
- 2、写方法
- 3、打aar包
- Unity端
- 1、引入aar包
- 2、写代码引用
- 参考文献
把unity的安装目录下面的class.jar包给复制出来,具体目录如下
注意
这里分 il2cpp 和 mono 两个,这个取决于你后面unity要使用那个方式打包,我这里使用的是il2cpp里面的jar包
以compileOnly 的方式引用
dependencies {
compileOnly files('libs/unity-classes.jar')
}
4、新建activity类继承UnityPlayerActivity
import com.unity3d.player.UnityPlayerActivity;
public class TestActivity extends UnityPlayerActivity {
// 自定义方法,供unity调用
public String getPath() {
return Environment.getExternalStorageDirectory().getAbsolutePath();
}
}
5、修改库的清单文件AndroidManifest.xml
我这里就是直接把app的清单文件直接复制过来,然后删除报错的代码,然后把新建的activity给引进来就可以了
6、打aar包
请参考android使用maven-publish打jar包和aar包并上传到本地maven仓库 这篇文章
Unity端 1、新建文件夹,引入aar包 2、引入清单文件 注意1在这里要注意复制出来的清单文件和aar包里面清单文件的不同之处
- 包名不同,unity的清单文件里面的包名要和一会后面设置的包名保持一致,但是不能和aar里面的包名一样
- 新增app_name在unity的清单文件的application标签上新增label
- 删除启动项,unity的清单文件里删除启动项,因为aar的包里已经有了,所以删除
public void test1() {
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject jo = jc.GetStatic("currentActivity");
string str = jo.Call("getPath");
Text.text = "方式一:" + str;
}
4、修改unity的包名
5、 打包
方式二
android端
1、新建library库
2、写方法
public class Utils {
// 该方法供unity调用
public int add(int a, int b) {
return a + b;
}
}
3、打aar包
步骤同方法一
Unity端 1、引入aar包 2、写代码引用public void test2()
{
// 通过包名+类名来获取
AndroidJavaObject jo = new AndroidJavaObject("com.test.testlib.Utils");
int str = jo.Call("add",2,3);
Text.text = "2 + 3 = " + str;
}
剩下其余的步骤跟 方法一 相同,这里不需要引用清单文件
参考文献[1] Unity使用aar打出apk过程一览
[2] Unity和Android通信



