Unity3D调用Android Java代码
admin
2023-01-21 04:00:47
0

最近公司准备接入91手机平台的支付系统,这边要实现在安卓上Unity调用Java代码,Unity刚刚上手,Android开发也接触不多,在网上找了不少资料,但都不是很详细,总觉得缺了些什么,经过两天摸索,基本完成功能,所遇问题颇多,在此一一总结

 

1.开发安卓环境的搭建

2.关于安卓开发

3.Unity调用安卓的各种问题

 

1. 安卓开发环境的搭建,在这里随便装了个Eclipse和ADK那些杂七杂八的,这个是真的很简单,网上的资料非常多,这里我可以很负责任地略过,随便参照网上的一个环境搭建,跑一个安卓的 Hello World,就OK了,下面随便给出两篇作为参考

 

http://game.ceeger.com/Manual/android-sdksetup.html

 

http://www.cnblogs.com/skynet/archive/2010/04/12/1709892.html

 

2. 看了一下安卓开发的入门资料,对安卓的开发有一个大概的了解,理解了几个简单的概念,Activity,Intent,R.java,AndroidManifest.xml

 

Activity 是活动,相当于一个窗口,配置为MAIN的Activity也相当于main函数

 

Intent 表示意图,例如我希望从这个Activity切换到另外一个Activity,这就是一个意图,这里简单理解为窗口切换的一个中介吧

 

R.java 是Eclipse自动生成的一个类,用来索引资源,在res目录下的添加任何资源都会在这里生成一个索引,它的好处是不容易写错资源名字,导致找不到资源,这个类也经常出问题,后面会提及

 

AndroidManifest.xml 是安卓应用程序的配置文件,配置了程序有哪些Activity,哪个是入口,需要哪些权限等等

 

3.进入主题了!

 

在开始调用任何安卓代码之前,确保你可以把你的程序编译成安卓的apk,在安装完安卓环境之后,Unity需要进行一些设置才可以编译,第一次编译需要设置ADK的目录,打开Preferences设置

 

Unity3D调用Android Java代码

 

如果你运气够好的话,在编译的时候就可以发现第一个错误,我的Unity是3.5的,它要求Android4.0的ADK,下载4.0的ADK后可以编译,这里经过验证,打包出来的apk是可以在安卓2.0上面运行的,关于目标机器的最低安卓版本,可以在PlayerSettings->Minnimum API Level设置

 

Unity3D调用Android Java代码 

点击OK然后在弹出的窗口中选择ADK的路径即可,我的路径是下图,Unity会在platforms下面找相关的文件

 

Unity3D调用Android Java代码 

打开File->Build Settings->Android->Build会生成apk文件,将apk安装到手机或者虚拟机,然后可以运行查看效果。不要直接点右三角来运行你的程序了,调用安卓的代码是执行不了的(听说有一个插件可以直接在PC上面调试,但未曾用过)

 

好了,现在可以开始编写安卓代码了,以宣雨松的那个demo为例子 

http://www.xuanyusong.com/archives/667

 

步骤如下:

1.创建Android 项目

 

2.导入Unity的classes.jar(这里他只说了mac下的方法,win下我的目录是 Unity\Editor\Data\PlaybackEngines\androidplayer\bin)

 

3.编写代码和相关的XML(这一点他把代码都贴出来了,可以直接复制)

 

4.Build安卓项目,在bin/classes目录下打包所有class成jar 在该目录下执行 

jar -cvf class.jar *

5.将打包好的class.jar 放到Assert目录下的 Plugins/Android 下,可以是任意名字和目录,Unity会在这里查找所有的jar作为插件,另外将安卓项目的res文件夹以及AndroidManifest.xml拷贝到Plugins/Android目录下

 

6.编写调用Java的测试脚本,并拖到场景中的对象上(直接拖到摄像机上面就可以了)

 

7.设置好程序的PlayerSettings,Identification Bundle Identifier*,设置为你的包名(我猜想,不设置这里,在AndroidManifest设置Activity的android:name,在类名前加上完整的包名应该是可以的)

 

8.Build编译成apk,然后安装到手机或者虚拟机上,运行,查看Log cat

 

中间遇到了N个问题:

 

1.项目出现红色的叉叉,代码资源都没错误

Problems窗口出现一个错误 Unparsed aapt error(s)! Check the console for output.

 

Unity3D调用Android Java代码 

更新ADT后问题解决,因为更新了ADK,导致ADK和ADT的版本冲突

 

Unity3D调用Android Java代码 

2.项目出现红色感叹号,源码和资源都没有问题,经过排查得出是引用的jar包的问题,重新配置一下jar包,clean一下,红色感叹号消失

 

 

Unity3D调用Android Java代码 

3.R.java文件丢失的问题,此问题比较常见,引入的第三方库有问题(不存在,重复引用等),res资源文件出错等等,会导致R.java丢失,修复问题后Clean一下项目会重新生成R.java

 

4.运行时闪退的问题,这一般是java的运行时错误导致,在Log cat可以看到错误信息 Unable to start activity ComponentInfo ...... 这一行是错误的原因,这里的原因是空指针

 

Unity3D调用Android Java代码

 

5.引用到了其他jar包,在打包成apk之前需要把引用到的jar包一起放到Unity工程的Android目录下,不然会找不到

 

关于代码的理解:


1. currentActivity 在Unity代码中我们通 AndroidJavaObject jo = jc.GetStatic("currentActivity");来获取当前的活动,这里的"currentActivity"表示当前的活动

 

2. setContentView 这个函数会传入一个布局的ID,这个一般对应一个layout.xml配置文件,当调用这个函数的时候,会根据布局配置文件来初始化界面


3.关于classes.jar 这里的classes.jar是封装了class文件一个包,类似于win下的dll,linux下的so,这里包的名字是随意的,但包的位置一定要在Andorid目录下


相关内容

热门资讯

德国总理:美国正在被伊朗羞辱 德国之声4月27日报道,德国总理默茨在访问一所学校时表示,在当前的持续冲突中,伊朗领导层正试图羞辱美...
理响中国|“长”歌以行,风云激... 光阴如梭,东方潮阔。这里是中国的长三角,世界的长三角。无论过去、现在还是未来,这片土地都因时代而生,...
白宫:特朗普及其国安团队开会讨... 新华社华盛顿4月27日电 美国白宫新闻秘书莱维特27日在记者会上证实,总统特朗普及其国家安全团队当天...
人民日报刊文:日本放开杀伤性武... 日本放开杀伤性武器出口推高地缘冲突风险(国际论坛)常思纯《人民日报》(2026年04月28日 第 0...
医疗保障法草案二审:明确生育保... 满足多样化健康保障需求本报记者 彭 波4月27日,医疗保障法草案二审稿提请十四届全国人大常委会第二十...
天津一景区发生自转旋翼机事故1... 澎湃新闻记者 吕新文中国民用航空华北地区管理局4月22日公布《豪客通航“10•1”天津长芦汉盐旅游区...
卡塔尔埃米尔与美国总统特朗普通... 当地时间24日,卡塔尔埃米尔塔米姆与美国总统特朗普通电话,重点就中东地区局势以及伊朗与美国谈判问题交...
男子30年前被扣押2859克黄... 澎湃新闻记者 王鑫家住辽宁省大连市的潘永嘉近日向澎湃新闻反映称,三十年前,他在大连周水子机场被盖州市...
商务部:取消反制欧盟两家金融机... 中华人民共和国商务部令二〇二六年 第1号鉴于欧盟已取消对中国两家金融机构的制裁措施,现公布《关于取消...
过去24小时共有5艘船只通过霍... 总台记者当地时间24日获悉,过去24小时内,共有5艘船只通过霍尔木兹海峡,其中包括一艘伊朗油轮。(总...