目的:调用安卓真机的某些特性api。比如电量等等。或者调用第三方sdk。
本文主要参考如下Blog,并省略了若干步骤得来,如果是第三方jar,请直接参照如下链接。
http://blog.csdn.net/u012322710/article/details/52790506#quote
工具:Android Studio2.3.3. Unity 2017.1 0f3 personal版本
=========自定义Jar开始===================
1.打开Android Studio。新建一个工程。如图1.请注意包名要与unity的一致。
2.如图2.这两个勾去掉。尽量精简工程。
3.如图3.打开资源管理器,删掉测试代码。
4.将C:\Program Files\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes\classes.jar 拷贝至工程目录下的app\libs下。
5.修改MainActivity为
importcom.unity3d.player.UnityPlayerActivity;
//继承自unity包的UnityPlayerActivity类
publicclassMainActivityextendsUnityPlayerActivity {
@Override
protectedvoidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
//供U3D调用的方法
publicintadd(inta,intb)
{
returna+b;
}
}
6.如图4.修改为apply plugin: 'com.android.library'。并且注释掉applicationId。
7.执行菜单Build- Make Project. 如果无错误。执行 Build APK.成功以后,来到
[工程名称]\app\build\intermediates\bundles\debug 下面应该会有一个classes.jar 和一个
AndroidManifest.xml
将这两个文件拷贝至Unity工程的Plugins\Android下面。或者你会的话 ,仅将activity android:name="com.unity.lb.utest.MainActivity" 这行更新到你已有的AndroidManifest里面就行了。目的就是让unity知道activity的名称这样而已。Unity会在产生apk的时候合并。
8.调用
AndroidJavaClass jc =newAndroidJavaClass("com.unity3d.player.UnityPlayer");//获取unity的Java类,只能调用静态方法,获取静态属性
AndroidJavaObject jo = jc.GetStatic("currentActivity");//获取当前的Activity对象,能调用公开方法和公开属性
intjieguo = jo.Call("add", 1999, 388);//调用add函数 返回计算结果
参照如上链接给的代码调用即可。其他调用方式请参考宣雨松大大的blog。
=================================结束=====================
题外:这个和unity导出源码工程,然后在java层面改的好处在于,方便。而且导出后,不必覆盖写好的java文件进去。步骤相对较少。适用于头脑不清醒的时候。
为嘛我的blog评论这么少呢?莫非每个看的人都解决了问题?还是文章层次太低的缘故?