之前QQ上有好多朋友都问过我unity做插件怎么把两个工程合并在一起。。其实很多unity开发者是没做过android和IOS源生开发的,所以在做SDK这块就有点力不从心。这两天刚好有点空我就把我合并Android工程的经验分享出来。
1.游戏包名( 类似 com.xx.xxx )
Android应用程序只能有一个包名,如果两个游戏包名一样,那么后者安装后会覆盖了前者。如下图所示,在ProjectSetting里面Bundle Identifier* 就是了。
不同渠道的包名不能相同,所以用shell自动打包的时候,可以先自动在unity里面设置你的游戏包名。这个游戏包名特别容易和你自己写的java.class混淆或者和sdk的包名混淆。。
2.Activity和View是啥区别?
这就要从游戏开发和软件开发的区别说起了。软件开发中每个界面就是一个Activity。比如我们玩的微博、微信一类的软件、每当你点击某个按钮切换界面的时候,其实就是新开了一个Activity,界面上的按钮啊 图标、输入框等等、所有显示单位都是一个View。一个软件程序随随便便10几20个Activity,每一个Activity上面会放很多不同的view。
而游戏开发,只有一个Activity、并且这个Activity上面只有一个View。游戏中的所有控件都是靠我们自己用代码来写成的。自己写的肯定没有源生的效果好了,举个例子你会发现为软件程序的列表滚动要比游戏里的列表滚动舒服很多,呵呵。
扯远了~
3.MainActivity
每个Android应用程序都需要一个启动的Activity。也就是在手机里你点了一个游戏的icon这时候打开游戏,弹出的第一个Activity。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.yusong.momo" > <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:name="com.yusong.momo.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> |
package:就是包名前面我们说了android每个应用程序有且只能有一个包名。
每一个Activity都要在“<activity /activity> ”中间预先声明。还要设置一个MainActivity,因为我们就一个Activity所以这里就设置它为MainActivity,也就是下面这两句。
<intent-filter>
<action android:name=”android.intent.action.MAIN” /> //表示该Activity是MainActivity。
<category android:name=”android.intent.category.LAUNCHER” />//表示在手机上点击游戏图标弹出该Activity
</intent-filter>
如果你有两个MinActivity就必须将他们合并成一个,或者只能保留一个MainActivity了。
4.MainActivity和AndroidManifest怎么写
具体可以参考unity的模板、unity.app->显示包内容->Contents->PlaybackEngines->AndroidPlayer
AndroidManifest.xml
还有com/unity3d/player/ UnityPlayerNativeActivity.java
最好参考模板来写。
5.我有两个包怎么合并?
src下面一般是com/xxx/xxx/Mainactivity.java这样的结构。
com/xxx/xxx可以和你的游戏包名不同。
6.C#调用java
C#调用Activtiy.游戏只有一个Activity不存在多个。就算项目真有多个activity,一旦打开它会盖住你的unity的activity的。这部分逻辑可以在java部分完成。。
MainActivtiy.java里面有一个Purchase的方法,并且接收一个参数, 一般就是 int float string bool 等。
1 2 3 4 5 |
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity"); jo.Call("Purchase", productId); |
C#调用静态类,静态方法。com.yusong.momo 下面放了一个staticClass的静态类。SetConfig就是它的静态方法。
1 2 3 4 |
AndroidJavaClass jc = new AndroidJavaClass("com.yusong.momo.staticClass"); jc.CallStatic("SetConfig", id); |
好了就这么多了。如果有什么意见欢迎大家在下面给我留言。。 或者有我没写到了,欢迎大家相告~~谢谢。
- 本文固定链接: https://www.xuanyusong.com/archives/3395
- 转载请注明: 雨松MOMO 于 雨松MOMO程序研究院 发表
MOMO老师,ecplise没落了,AS崛起了,网上找到的教程大部分都是导出jar给unity调用,极少是用AS导出 aar 包给unity调用。老师你是不是要来一波 Unity调用 aar 的教程啊?我网上找到一个教程,但是可能我太蠢,并没有成功跑起来。希望老是你可以写的比他更详细,那就是我们的福音了。http://blog.csdn.net/ycl295644/article/details/52470921
我想问下,我想把Untiy工程集成到我的android studio项目内,请问怎么集成?我现在尝试着把导出的untiy的android工程内的相关文件和文件夹复制到我的android工程,但是运行启动就报错。不知道你们又遇到过的没?
直接import就行吧。
谢谢MOMO,问下有没有iOS的工程合并的呢,而且是那种多个完整的unity项目,在一个原生的iOS应用中,以模块化的形式在应用中展示。哦,还有就是unity的资源是可以在应用上架之后从服务器加载。像这种有没有解决办法呢。谢谢。
不太好做
我这个除了他的图标文件错误外还增加了这个:(at ‘theme’ with value ‘@style/AppTheme’).的错误,这个不知道是不是一个文件,我在ecilipse里面也没有啊
解决了,ic_launcer这个名字改为app_icon即可,我的那个错误把哪行删除了就行了。
你好,在unity运行的时候报错:Exception: JNI: Init’d AndroidJavaClass with null ptr!;不知道是什么原因。打包的时候还会报这个错误:CommandInvokationFailure: Unable to convert classes into dex format. See the Console for details.
C:Program FilesJavajdk1.7.0_45binjava.exe -Xmx2048M -Dcom.android.sdkmanager.toolsdir=”C:/Program Files/AndroidSDKtools” -Dfile.encoding=UTF8 -jar “C:/Program Files/Unity/Editor/Data/BuildTargetTools/AndroidPlayersdktools.jar” -,不知道MOMO遇到过这种问题没
您好,打扰一下。我也是试过很多办法都没有成功。现在迫在眉睫了。
我们接一个安卓SDK。我按网上的操作新建了安卓的工程,在和unity合并。然后用unity自带的打包安卓工程时,生成的apk,我导入模拟器或者真机的时候,安装完成后,手机上出现了2个一模一样的安装包。2个都能用。可是卸载其中任何一个另一个也跟着卸载了。我找了好几天都不知道是哪里出的问题。
可以帮我看一下么?拜托。
嗯 我只要 android那边有android:icon=”@drawable/ic_launcher”这句话unity导出apk的时候就会报错C:UserswzngluAppDataLocalAndroidandroid-sdkbuild-tools23.0.1aapt.exe package –auto-add-overlay -v -f -m -J gen -M AndroidManifest.xml -S “res” -I “C:/Users/wznglu/AppData/Local/Android/android-sdkplatformsandroid-23android.jar” -F bin/resources.ap_
stderr[
AndroidManifest.xml:11: error: Error: No resource found that matches the given name (at ‘icon’ with value ‘@drawable/ic_launcher’).
请问该怎么解决啊
AndroidManifest.xml:11: error: Error: No resource found that matches the given name (at ‘icon’ with value ‘@drawable/ic_launcher’). 少这个文件啊。。
没有少的 真的没有少,在android中都是对的 ,在unity中就爆上面的错,在unity中不要android:icon=”@drawable/ic_launcher”这句话又能导出成功,我用的是android studio,unity版本是5.2.1f1(64-bit).都被这问题折磨疯了,unity换成低版本不行,sdk用老版本也不行。。。。。。。但是不要android:icon=”@drawable/ic_launcher”这句话,出来的apk又没有图标。。。呜呜
你的资源目录下 drawable 有 ic_launcher 这个资源么?。。。
哦 我用你的这个例子也是这个问题~~~~请问您用的是哪个版本的sdk和unity啊?
啊啊,momo大神应该怎么解决啊?
用的AS 打的包aar吗?我也是这样stderr[G:Unity ProjectUnityForAndroidTempStagingAreaandroid-librariesapp-debugresvaluesvalues.xml:9: error: Error retrieving parent for item: Resource type cannot be an empty string ‘/Theme.AppCompat.Light.DarkActionBar’.G:Unity ProjectUnityForAndroidTempStagingAreaandroid-librariesapp-debugresvaluesvalues.xml:13: error: Error: No resource found that matches the given name: attr ‘colorAccent’.G:Unity ProjectUnityForAndroidTempStagingAreaandroid-librariesapp-debugresvaluesvalues.xml:11: error: Error: No resource found that matches the given name: attr ‘colorPrimary’.G:Unity ProjectUnityForAndroidTempStagingAreaandroid-librariesapp-debugresvaluesvalues.xml:12: error: Error: No resource found that matches the given name: attr ‘colorPrimaryDark’.]
我也遇到这问题了,有解决方法吗
你好,我也遇到了这个问题,请问找到解决方法了吗
我想做unity插件的形式引入androidSDK,但是androidSDK有第3方的内容,比如说facebook,然后我想合并成一个android项目然后制作android插件,可以出篇文章介绍下步骤么
这个不太好写, 因为内容很多。
我有个问题在unity有两个AndroidManifest一个高通,另一个我自己写的,两个包名不一样,在合并的时候我直接吧自己的activity放在了高通下面,而且类名不一样,但是无法调用,是有哪些地方要注意吗,qq1392153503
最后如何实现了
我觉得还是去学一下Android开发比较好,有时候做Unity与Android的混合开发的时候,特别是Android与Unity相互调用或是IOS与Unity相互调用,感觉在Android和IOS这一块有很大的力不从心啊。。。看你之前的那几篇(18、19),确实对AndroidManifest和MainActivity晕晕乎乎的。。。
metaio的AndroidManifest.xml怎么和自己创建的android插件的AndroidManifest.xml合并啊?
你好。你们是如何合并的。。能指教的吗。
你好,我用了高通的插件,请问你合并XML成功了吗?
unity导出安卓工程后如何调用安卓手机摄像头。?
com.unity3d.player.UnityPlayer 这个类在android里面是哪个jar包?
你好,unity 底层是怎样获取android keycode之类的事件的
这个要在java里做。。
是在Android 的getkeydown 和dispatchkeyevent 里面获取吗
宣老师你好,我现在开发了Android部分代码,在手机上运行没问题;做了一个Unity小模型,打成APK在手机上也能正常运行,但是参考了您“与android相互传递参数(十九)”那篇文章后,二者交互没能成功,要是想调试是在eclipse里做还是在Unity里做?急求您的解答,谢谢!
为什么游戏开发,只有一个Activity、并且这个Activity上面只有一个View?不能使用系统控件吗?
这就是游戏和软件开发的不同了。。做游戏的人 喜欢啥东西都自己做来, 不用高级控件, 全自己实现了。原因就是自己实现起来很灵活。。。。 而做软件刚好相反,很少的地方自己做,大量使用系统的高级控件。。。
我是看出来,你个DB,就知道回复 容易的
Android这块 我要做个本地推送,比如游戏里面的 体力恢复了,要给玩家做一个推送,我开了一个子进程的 Service,我现在碰到的问题是 unity如何给这个Service传参数…???求指点
用Intent
游戏看来各种平台都得必须会呀!我这缺的还多了。。。。
赞