Unity默认导出的是Android-Eclipse工程,毕竟Eclipse for Android开发在近一两年才开始没落,用户量还是非常巨大的。
个人认为AndroidStudio非常好用,能轻易解决很多Eclipse解决不了或者很难解决的问题。
所以我将Unity导出的Andoid工程分为Eclipse和AndroidStudio两部分。
不过我之后的相关内容都会使用AndroidStudio,希望依然使用Eclipse的同学尽快跟上~
本文主要讲解Unity导出的Android-Studio工程的目录结构。
话先说在前面,这篇文章和1、导出的Xcode工程 非常相似,我建议手游开发者将两篇结合起来看~
同时,我建议大家完整阅读姊妹篇2、导出的Android-Eclipse工程 ,以建立完整的流程认知体系。
我所用软件的版本:
Unity 535f1
AndroidStudio 131
前导步骤
第一步,创建一个新的工程 Unity_Build_to_Android
第二步,创建以下文件
//为了演示原生Android的jar包
Plugins/Android/libs/Jarjar
//为了演示原生Android调用jni所需要的so文件
Plugins/Android/libs/x86/libnativeso
//为了演示原生Android调用jni所需要so文件
Plugins/Android/libs/armeabi-v7a/libnativeso
//为了演示Unity中随包只读文件的去向
StreamingAssets/ALL_EmptyTxttxt
第三步,保存一下场景,如下图
第四步,打开PlayerSettings,修改Bundle Identifier(包名),Unity里面不修改不让导出Android的~
第五步,选择Android平台,Export导出Android工程
第六步,使用AndroidStudio打开该Eclipse工程
选中Unity导出了Eclipse工程,OK。
存储到合适的路径,Next。
三个勾都选上,Finish
进入正题
0、Eclipse -> AndroidStudio
我们先来看看从Eclipse工程到AndroidStudio工程,在结构上有哪些变化,下图为AndroidStudio工程自动生成的导入摘要。
通过这个文件我们可以看到,AndroidStudio其实是建立了一个新的AndroidStudio工程,然后将原Eclipse工程中有用的文件转移到对应目录。
显而易见的迁移就不说了,主要看看libs文件夹中的迁移方向,我们可以看到jar文件都转移到了app/libs文件夹下、/so文件都转移到了app/src/main/jniLibs文件夹下/so。
1、程序入口
任何程序都有一个入口,Unity导出的Android工程中也不例外,通过下图我们可以看到,在AndroidManifestxml文件中,将UnityPlayerActivity设置为应用的入口。(AndroidManifestxml是Android的配置文件之一,具体请自行搜索~)
通过下图我们可以看到,UnityPlayerActivity是继承了Activity,至于它是什么我就不赘述了,大家可以看一下这一篇文章:Activity详解(生命周期、以各种方式启动Activity、状态保存,完全退出等)
下图为一个Activity的生命周期,我们可以看到系统事件存在着非常有用的监听,在UnityPlayerActivityjava里面我们也可以看到对应的函数,这意味着在Unity中一样可以收到这些事件,以后我们将继承UnityPlayerActivity,并重写这些监听。
2、C# -> C++
这就是个很尴尬的问题了,现在535的版本还不支持在Android平台下使用IL2CPP的模式,但是54的版本已经可以支持了,这一点我打算等54的版本出了再补上~
3、资源 StreamingAssets -> app/src/main/assets
Unity导出Android工程后,原工程中的各种资源都被压缩、打包、加密后存放在app/src/main/assets/bin/Data文件夹中,见下图,这一点和iOS是一致的,网上也有很多资源解密的方法,大家有需要可以自行搜索。
我们重点说一下Unity中的StreamingAssets文件夹,关于这个文件的作用,大家可以看一下这篇文章:Unity3D研究院之手游开发中所有特殊的文件夹
通过下图我们可以看到,StreamingAssets文件夹中的ALL_EmptyTxttxt文件被完整地拷贝到assets文件夹中,实际上不光是文件,文件夹也会原封不动地拷入该文件夹。
至于这有什么用,比如说,配置文件放在这里,上手机调试的话可以在Android工程中直接修改配置,而不需要到Unity里重新导出Android工程。
4、 Plugins/Android/libs -> app/libs 、app/src/main/jniLibs
Plugins/Android文件夹中通常会放一些jar、so文件,这些文件是什么、有什么用,大家可以看一下官方的文档:Building Plugins for Android
在Android-Studio工程中,jar文件都转移到了app/libs文件夹下、/so文件都转移到了app/src/main/jniLibs文件夹下/so。
这些文件将拷贝至在的libs文件夹中,在Android编译时也将被编译。
5、unity-classesjar、libmainso、libmonoso、libunityso
unity-classesjar是unity的封装好的一些Java类,用于在Android原生环境下处理相关业务,如果有兴趣的同学可以去反编译看看。
libmainso、libmonoso、libunityso文件是Unity写的底层CPP,当然其中也包含我们的C#逻辑,由于我们的重点不在这,就不展开讲了。(这个超纲,我没研究过~)
6、 Icon
在Unity的Player Settings是中,我们可以添加相应的Icon
这些Icon将被重新压缩、命名最后放入下图中的位置。
关于在哪边设置icon的问题,看项目需要吧,如果觉得分辨率不够可以到导出工程这边添加修改~
比如:多渠道打包时,可能要多次替换Icon,写脚本在Android工程中自动化替换打包是一种不错的选择~
7、闪屏
Unity在Android是可以设置单闪屏的,如下图。
不过Android天生是不带闪屏这种东西的,所以APP会在第一个Activity中先显示预先设定的。想深入了解可以看一看这篇文章:Android进阶篇之引导页系列之Splash闪屏Logo
Unity的在Android的闪屏实现应该也是这样处理的,注意注意!!这个思路很重要,以后我们Unity的闪屏也是这个思路做的。
8、Player Settings -> 设置
说实话不太明白你的意思!
1、如果你是和服务器连接的换,并且也保存了连接信息,它可能一直处于连接状态,所以你只能看到第二个页面。
2、有可能是你根本没有完全退出,你之后把它放到了后台,如果你的代码没有改动,重新运行只能回到现在登录的状态,就是mainActivity
Android开发过程中我们有时需要使用第三方apk资源,而启动第三方apk在某些情况下需要指定相应的包名和启动的Activity名,这个时候就需要获取这两个名称,我们可以使用如下三种方法:
1、使用aapt //aapt是sdk自带的一个工具,在你安装的Eclipse路径下的sdk\build-tools\中,如我的是D:\Eclipse\androidTools\sdk\build-tools\android-442,如果你下载有apk反编译工具,也可以直接使用里面的aapt
以“GO备份apk”为例,先进入cmd命令行窗口,然后运行:D: -> Eclipse\androidTools\sdk\build-tools\android-442
-> aapt dump badging C:\Users\Administrator\Desktop\GO备份apk,即可获取到AndroidManifestxml中我们需要的内容,如
package: name='comjiubanggobackupex'
launchable-activity: name='comjiubanggobackupproStartupPageActivity'
2、查看AndroidManifestxml
同样是查看AndroidManifestxml,这里我们可以采用反编译方法来获取信息,同样是打开cmd命令行窗口,然后运行:E:
-> apk反编译工具\apktool\apktool -> apktoolbat d -f C:\Users\Administrator\Desktop\GO备份apk GO备份,然后打开“GO备份”文件夹,打开droidManifestxml文件,找到manifest节点的package属性值package="comjiubanggobackupex"语句即为包名,查找androidintentactionMAIN和androidintentcategoryLAUNCHER对应的activity,该activity对应的android:name属性即为入口activity名称,如<activity
android:name="comjiubanggobackupproStartupPageActivity"。
3、使用uiautomatorviewer
可以直接在命令行输入uiautomatorviewer,打开获取屏幕截图工具,连接手机,打开所要获取包名的应用,然后获取其截图,根据截图查看package即可,uiautomatorviewer的使用这里就不做介绍了。使用这个需要注意的是,该app必须是有界面的,否则无法获取。
另外,
androidintentactionMAIN 属性决定应用程序最先启动的Activity
androidintentcategoryLAUNCHER属性决定应用程序是否显示在程序列表里
0 引言Android是Google开发的基于Linux平台的开源手机 *** 作系统。2005年由Google收购注资,并组建开放手机联盟开发改良,逐渐扩展到平板电脑及其他领域上。Android是一个对第三方软件完全开放的平台,这使得开发者在开发程序时拥有更大的自由度,突破了iPhone等只能添加为数不多的固定软件的枷锁,同时与Windows Mobile、Symbian等厂商不同,Android
*** 作系统免费向开发人员提供,大量地节省成本。正因如此,Android项目目前正在从手机运营商、手机厂商、开发者和消费者那里获得大力支持。据统计,在2011年第一季度,Android在全球的市场份额首次超过塞班系统,跃居全球第一。2012年7月数据显示,Android占据全球智能手机 *** 作系统市场59%的份额,中国市场占有率为767%。可见,Android平台具有很大的市场发展潜力。
1 平台架构
Android的开发平台主要由4层构成,其中,第1层是Linux
内核层,该层处于最底层,第2层,C/C++库集合Libraries和Android运行时层,该层中的库集合,提供给Android系统的各个组件使用,它的功能通过应用程序框架暴露给开发者。该层中的Android运行时包含了核心库和虚拟机,提供了大部分在JAVA编程语言核心类库中可用的功能,提供专门为移动设备优化过的虚拟机。第3层,应用程序框架Application Framework
层,它是Android提供的开发的开发平台,使开发者能够编制丰富和新颖的应用程序。第4层,最上层,应用程序集合层,主要包括电子邮件客户端、SMS程序、日历、地图、浏览器、联系人和其他设置等,该层中的所有应用程序都是用JAVA编程语言写的。
2 Android开发平台的搭建
Android开发平台的搭建需要安装JDK,SDK等工具,由于最上层的应用层都是采用JAVA语言编写,故必须要装JDK,同时,由于JDK只能用于第3层跟第4层,而底层是用C/C++语言写的库,所以必须安装SDK,用来满足Android的运行环境,比如,它可以把JAVA程序转换为Android程序所能识别的代码DEX。此外,要建立一个Android项目,我们必须安装插件Android开发工具ADT(Android Development Tools)。具体开发环境的搭建如下:首先,安装JDK,至少需要15以上的版本,其次安装Eclipse,这是一个比较适合Android开发的工具,接着安装Android SDK,再次安装插件ADT,最后重启Eclipse,配置Android SDK路径。
3 Android提供的四大应用程序组件及职责
Android提供的四大应用程序组件,即Activity、BroadcastReceiver 、ContentProvider、Service。其中,Activity:它是应用程序的入口,主要用于界面显示,接收事件(如按键),控制显示跳转。BroadcastReceiver:它主要用于注册和接收系统广播的事件,也可接收自定义的广播事件。ContentProvider:它提供数据库查询接口,可对外(其他应用程序)公开数据查询服务。Service:它是一个独立的进程,可一直在后台运行,可以与其他组件(如Acitivity,Service,ContentProvider)通过远程连接绑定进行交互,同时可对外(其他应用程序)提供服务交互接口。
4 Android的核心应用程序框架思路
Android的核心应用程序框架主要为三层架构:UI层(Activities层),调度层(Dispatch层)和应用服务层(Services层)。其中UI层由Activities,Views组成,负责应用程序UI显示,进行跳转,与调度层进行交互,控制调度层对服务进行管理。调度层由服务管理、服务绑定、消息转发、异常通知四个模块组成,它负责与后台服务的绑定与通信,处理UI层的请求,管理服务层相关服务,管理应用程序的异常输出。应用服务层由Service,Receiver,ContentProvider组成,它负责与系统进行通信,监控系统行为并处理,与调度层进行消息通信。
5 一个简单的Android工程架构的介绍
Android工程主要包括:1)src目录,存放java原代码;2)gen目录,自动生成的目录,存放所有由Android开发工具自动生成的文件。在该目录中,有一个最重要的文件就是Rjava。这个文件由Android开发工具自动产生的。Rjava中包含了界面、图标、常量等各种资源的id,通过Rjava,应用可以很方便地找到对应资源;3)res资源目录,主要存放各种资源,如xml界面文件,或数据;4)assets资源目录也可以存放资源文件,但是读取assets目录下的文件必须指定文件的路径;5)AndroidManifestxml项目清单文件,该文件列出了应用程序所提供的功能,以后开发好的各种组件需要在该文件中进行配置;6)defaultproperties项目环境信息,一般是不需要修改此文件。
项目的执行流程:AndroidManifestxml是程序的入口,在该文件中,找到主活动,如Mainactivity,在主活动的生命周期中,要调用SetcontentView(布局),通过布局的名字找到相应的布局文件如:loginxml,在该布局中,会有很多控件在其中,逐一显示,同时,如果该控件所对应的事件发生后要及时捕获它。
在接下的例子中,笔者尝试做了3个活动,分别如图1、图2、图3所示。
6 结束语
Android应用程序开发是一项较为复杂的工程,本文,介绍了Android开发平台的架构、开发环境的搭建、以及具体的
目结构介绍等。由于Android平台具有良好的开放性等特点,可以使运营商能非常方便地制定特色化的产品,具有很大的市场发展潜力。
基金号:2011年武汉市属高校科研课题,任务驱动的高职数据库类课程的教学研究(编号2011109)
参考文献:
[1]百度百科,Android,htm,
2012
[2]百度文库,三大平台简介,
1ffad6195f312ba6dchtml,
安卓组件是安卓应用程序最基本的组成单元。每种组件都可以作为系统进入安卓程序的入口。你可以在清单文件中直接把 <intent-filter>------MAIN 这句话写在你的service下面。但是我想不通为什么要通过service作为入口呢,service没有界面。用户就看不到你的应用
>
以上就是关于如何获取Unity Plugins下的默认的android工程全部的内容,包括:如何获取Unity Plugins下的默认的android工程、android开发时,有两个activity,一个是login,一个是main,login是入口activity、如何查看Android应用apk的包名和入口Activity名称等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)