Unity调用自定义Jar



目的:调用安卓真机的某些特性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为
import com.unity3d.player.UnityPlayerActivity;


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


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }


    //供U3D调用的方法
    public  int add(int a, int b)
    {
        return a+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 = new AndroidJavaClass("com.unity3d.player.UnityPlayer");   //获取unity的Java类,只能调用静态方法,获取静态属性  
        AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");      //获取当前的Activity对象,能调用公开方法和公开属性  
        int jieguo = jo.Call<int>("add", 1999, 388);             //调用add函数 返回计算结果  




参照如上链接给的代码调用即可。其他调用方式请参考宣雨松大大的blog。


=================================结束=====================


题外:这个和unity导出源码工程,然后在java层面改的好处在于,方便。而且导出后,不必覆盖写好的java文件进去。步骤相对较少。适用于头脑不清醒的时候。
为嘛我的blog评论这么少呢?莫非每个看的人都解决了问题?还是文章层次太低的缘故?

猜你喜欢

转载自blog.csdn.net/glunoy/article/details/76638929