Unity自动打包Apk

unity打包apk相对来说比较容易,相信出过的人都明白,出包过程,没有大的难度,一步一操作,一步一等待,繁琐耗时,不懂的人又代替不了。这时候需求就来了,如何简单的一键打包搞定,这个就稍微有点难度,当然作为程序员就是要解决这些问题,封装变化,变繁为简。

打包apk大概可以分为以下步骤(出apk需要的jdk,Android sdk这些不用多说,相信大家都会配置)

1、配置PlayerSetting

2、配置渠道等第三方SDK

3、copy外部资源和一些自己工程需要的一些配置

4、unity打包build(如果出成Android工程,还需要就行Android工程的自动打包apk)

没有什么难的东西,都是一些配置,繁琐的东西,一键化也就是写个脚本,按照步骤一步一步的执行就行了

很简单相信大家都会,只是一些细节需要注意一下,细节中还是有一些坑的

一、配置PlayerSetting 

有两种方法

1、事先使用PlayerSetting 编辑页面保存一个配置好的ProjectSettings.asset,需要的时候直接替换掉ProjectSettings目录下的ProjectSettings.asset就行了

设置分离obb文件的属性,有的人可能不知道

2、使用代码设置PlayerSetting(凡是在PlayerSetting编辑页面看到的属性都是可以使用代码进行设置的)

(1)、Unity提供了命令行方式进行打包、调用方法等操作

command line形式: unity执行文件路径 -projectPath 项目工程路径 -executeMethod 方法名 各种参数

在unity项目Editor下的一个继承ScriptableObject的文件中的static方法都可以使用unity command line执行(注意Unity需要是关闭的)

$unity_path -projectPath $project_path -quit -batchmode -executeMethod ProjectBuild.ProjectSetting -qmplatform $platform //$unity_path unity执行文件路径
//$project_path 项目工程路径
//-batchmode 不打开unity
//-executeMethod  执行unity方法
//ProjectBuild.ProjectSetting Editor下的脚本名为ProjectBuild,其中有个名为ProjectSetting的方法,具体代码如下
//-qmplatform $platform 传入的参数

(2)、有一些属性设置,比较难找,使用 PlayerSettings.SetPropertyInt("ScriptingBackend", (int)ScriptingImplementation.Mono2x, BuildTarget.iPhone); 慢慢尝试

 1   class ProjectBuild : Editor
 2     {
 3         const string OPT_PLATFORM = "-qmplatform";
 4         const string OPT_BUNDLE_VERSION = "-qmbundle_version";
 5         const string OPT_SHOW_VERSION = "-qmshow_version";
 6         const string OPT_VERSION_CODE = "-qmversion_code";
 7         /// <summary>
 8         /// 根据参数配置Unity ProjectSetting
 9         /// </summary>
10         static void ProjectSetting()
11         {
12             Dictionary<string, string> settings = new Dictionary<string, string>();
13             settings[OPT_PLATFORM] = "";
14             settings[OPT_BUNDLE_VERSION] = "";
15             settings[OPT_SHOW_VERSION] = "";
16             settings[OPT_VERSION_CODE] = "";
17             string[] args = System.Environment.GetCommandLineArgs();
18             ParseArgs(settings, args);//解析参数
19
20             PlayerSettings.companyName = "****";
21             PlayerSettings.bundleVersion = settings[OPT_BUNDLE_VERSION];
22             PlayerSettings.shortBundleVersion = settings[OPT_SHOW_VERSION];
23             PlayerSettings.defaultInterfaceOrientation = UIOrientation.AutoRotation;
24             PlayerSettings.allowedAutorotateToLandscapeLeft = true;
25             PlayerSettings.allowedAutorotateToLandscapeRight = true;
26             PlayerSettings.strippingLevel = StrippingLevel.StripByteCode;
27             PlayerSettings.aotOptions = "nimt-trampolines=512,ntrampolines=2048";
28             PlayerSettings.targetGlesGraphics = TargetGlesGraphics.Automatic;
29             PlayerSettings.Android.preferredInstallLocation = AndroidPreferredInstallLocation.Auto;
30             PlayerSettings.Android.targetDevice = AndroidTargetDevice.FAT;
31             PlayerSettings.Android.minSdkVersion = AndroidSdkVersions.AndroidApiLevel9;
32             PlayerSettings.Android.forceInternetPermission = true;
33             PlayerSettings.Android.forceSDCardPermission = true;
34             PlayerSettings.Android.bundleVersionCode = int.Parse(settings[OPT_VERSION_CODE]);
35             PlayerSettings.Android.useAPKExpansionFiles = true;//是否使用obb分离模式
36             PlayerSettings.productName = "******";
37             PlayerSettings.bundleIdentifier = "*****";
38             PlayerSettings.SetScriptingDefineSymbolsForGroup(BuildTargetGroup.Android, "宏定义");//宏定义的设置
39             EditorUserBuildSettings.SwitchActiveBuildTarget(BuildTarget.Android);
40         }
41     }

(3)、对于一些如Icon、splash页面的设置可以使用原名替换图片的方法

(4)、 PlayerSettings.Android.useAPKExpansionFiles = true;//是否使用obb分离模式,这个主要是针对Google play的

obb的命名,是需要一定的规则的,不然无法使用,可以使用代码自动设置obb的名字在Editor目录下有这个方法,出包时会自动调用,可以在这里设置

(如果需要对dll文件进行加密的话,肯定是出成了Android工程,这里可以获取Android工程中的dll文件进行加密,同时替换可以解密的so文件)

[PostProcessBuild(90)]

public static void OnPostProcessBuild(BuildTarget target, string pathToBuiltProject)

{

files = Directory.GetFiles(pathToBuiltProject, "*", SearchOption.AllDirectories);

if (files != null)

{

foreach (string fileName in files)

{

if (fileName.Contains(".obb"))

{

int bundleVersion = PlayerSettings.Android.bundleVersionCode;

string bundlePackageName = PlayerSettings.bundleIdentifier;

Directory.Move(fileName, pathToBuiltProject + "/main." + bundleVersion + "." + bundlePackageName + ".obb");

}

}

}

}

obb的使用上的还有一点小小的坑,Google play商店在下载游戏的时候,会自动下载apk所需的obb,但是有时候也不能保证一定成功,所以需要项目本身就具有这样的检测下载功能https://www.assetstore.unity3d.com/en/#!/content/3189这里有非常详细的代码,可以copy直接使用

二、配置渠道等第三方SDK和copy外部资源

1、sdk的接入

统一接口,支持不同各种渠道的sdk接入

http://blog.csdn.net/chenjie19891104/article/details/42217281这个可以看一下

2、和不同渠道绑定的参数,建议拿出来做配置,可以不用重新出版本就可以切换不同渠道的版本

3、sdk切换相关目录资源的替换,unity直接出成apk的话,就在unity打包之前,如果是先出Android工程的话,也可以在Android工程中进行,效率会更快一点,不需要再从unity build就可以出成不同的渠道包

三、unity打包build

unity build Android 可以直接打包成apk或是Android工程,使用命令行调用的方式跟上面ProjectSetting的类似,-executeMethod 的参数名换成相应函数名即可,

static void Build()
 {
           string android_project_path = "";//目标目录
            BuildTarget target = BuildTarget.Android;
            string[] outScenes = GetBuildScenes();//需要打包的scene名字数组
            BuildPipeline.BuildPlayer(outScenes , android_project_path, target, BuildOptions.AcceptExternalModificationsToPlayer);
 }
// BuildOptions.AcceptExternalModificationsToPlayer  表示出成Android工程

直接打包apk就不用多说了,build成功就行了

出成Android工程后还需要几步才能完成

1、Android工程,自动打包apk,需要配置ant环境

到官方主页http://ant.apache.org下载新版(目前为Ant1.9.6)的ant,得到的是一个apache-ant-1.9.6-bin.zip的压缩包。将其解压到你的硬盘上,例如:C:\apache-ant-1.9.6。然后配置环境变量

ANT_HOME    C:/ apache-ant-1.9.6

path             C:/ apache-ant-1.9.6/bin

classpath      C:/apache-ant-1.9.6/lib

2、可以在Android工程中进行资源和渠道SDK的替换(也就是目录文件的替换),这样可以一个工程出成不同的渠道包

3、签名的需要的ant.properties,这里写着Android签名文件的目录,用户名和密码,需要事先写好,copy到Android工程目录下

key.store=./config/xxx.keystore

key.alias=xxx

key.store.password=xxx

key.alias.password=xxx

4、使用Android command line生成build.xml(这是ant签名打包的必须文件)

command line形式:  android update project -p Android工程路径 -n 生成apk的名字(这个command line的使用需要配置一下环境变量)

android update project -n $apk_name -t 1 -p "$android_pj_path"
//$apk_name  生成apk的名字
//"$android_pj_path"  Android工程路径

5、使用ant release,这个command line需要在Android工程目录下执行,不然command line会找不到路径,最后在bin目录下生成apk文件,有签名的和不签名的

可以考虑与Jenkin结合使用,会更方便操作

(by sht)

时间: 2024-10-26 00:13:10

Unity自动打包Apk的相关文章

Unity自动打包 apk

1.流程 Unity打包 apk,会把Unity安装目录下的默认 AndroidManifest.Xml 文件覆盖到apk中去,同时还会拷贝该文件所在目录下的其它默认设置文件,如 res 和 assets 文件夹. AndroidManifest.Xml 主要是用来设置一些权限,如 Unity打包时进行的 PlayerSettings 设置就会体现在这个文件中. 我们在打包的时候,Unity会先检测工程目录的 Assets/Plugins/Android 目录下有没有 AndroidManife

Unity自动打包工具

最开始有写打包工具的想法,是因为看到<啪啪三国>王伟峰分享的一张图,他们有一个专门的"工具程序员"开发各种工具.(ps:说起来这个王伟峰和他的创始团队成员,以前跟我是同一个公司的,公司名字就不透露了,只是当时在不同的部门,相互不认识).正好我们项目也到了后期,该准备接入渠道了.于是,我就着手写我们的打包工具.约定一下,下文中,平台是指操作系统平台,比如iOS.Android.WP8.Metro:渠道是指发布渠道,比如App Store.WP8商店.360.91.小米等. 上

ant使用总结(一):使用ant自动打包apk

配置ant环境 (1)下载ant 下载地址一:http://mirrors.cnnic.cn/apache//ant/binaries/apache-ant-1.9.4-bin.zip 下载地址二:http://pan.baidu.com/s/1gdnc98n (2)解压ant,并把bin目录路径配置到系统path变量中 在命令行窗口中能执行ant命令表示配置成功 更新工程配置 (1)打开命令行窗口,执行如下命令: SDK根目录\tools\android update project --na

ant使用总结(三):批量打包apk

准备 1.准备ant环境,和update工程,参考文章>>ant使用总结(一):使用ant自动打包apk 2.ant中实现迭代,需要添加ant-contrib-1.0b3.jar到classpath,参考文章>>ant使用总结(二):相关命令说明 工程说明 Demo工程地址:https://coding.net/u/linchaolong/p/AntTest/git 打开命令行,cd到工程根目录下,执行ant run命令就会开始自动批量打包,所有渠道包将会输出到AntTestOut

(插播)关于使用jenkins + unity +Xcode 来进行自动打包的处理。

最近了解了下jenkins流程化服务的东西,个人感觉jenkins是一个很方便的工具,主要是方便,设置好流程性得命令.只需确定下就可以达到自动化.减轻了错误得发生和简化了带来的复杂得步骤.今天我们就以jenkins用来编译unity生成APK包和ipa文件 为例子,做一个学习. 平时做项目需要团队之间的合作,如果策划想自己去做一个测试包,又要去找你做,还要打断你的工作,去专门编译一个包比较麻烦.如果这时候,你已经有了一个jenkins得服务器,他可以自己通过简单得操作就可以得到想要得包,没有必要

Eclipse下配置Ant脚本 自动打包带签名的Android apk

虽然eclipse很少用了,但是在古老的项目上还是会用到.一个麻烦事是打带签名包的时候,非常不方便.下边纪录下配置ant,自动打包带签名apk的过程,作为备忘.(PC环境为MAC) 1,第一步得安ant,下载对应安装包,解压后配置环境变量: export ANT_HOME="/Users/yanzi/work/apache-ant-1.9.4" export PATH=${PATH}:${ANT_HOME}/bin 通过which ant检查是否安装成功. 2,在项目目录下运行:and

Unity3D游戏开发之Unity打包APK

Unity3D游戏开发之Unity打包APK 1.安装JDK 2.配置JDK 3.在Paht的变量值后面加分号,把D:\android\adt-bundle-windows-x86-20131030\sdk\tools放在Path后面.[狗刨学习网] 4.点击菜单栏中的Edit-->Preferences 看Android SDK Location这个选项 浏览你的模拟器路径. 5.点击 File-Build Settings 然后再 点击Add Current 添加你的场景.再 点击Switc

在Hudson中,使用ant自动对安卓项目编译打包apk

本文对如何在hudson中配置ant编译打包apk进行说明,主要包括build.xml文件的编写.环境的配置.在Hudson中创建任务. 一.为安卓项目创建build.xml文件 1.打开cmd进入sdk目录下的tools目录,输入: android.bat list target  来查询我们现有的版本list有哪些.如下图: 途中用红框圈出的 id 与蓝框圈出的版本号对应关系,下面需要用到. 2.打开安卓项目工程下的 project.properties 文件,查看target 版本号,如下

xBuild APK差分与合成,Zip差分与合成,自动打包

在游戏开发中,为满足用户需求,产品运营需求,改动的特别多,升级是件极其频繁的事情(没办法,一切以用户为中心),如果一个游戏APP又同时是个集合类型的(内置多个游戏),做完这个游戏只有一个感觉:再也不会爱了... 我们的游戏是用Lua写的,所以Android客户端分为: Apk升级(细分为1.完整升级;2.增量升级;3.第三方升级): Lua升级(细分为1.大厅升级;2各个游戏升级),同时Lua的游戏采用的是热更新机制: 同时涉及 各个游戏->大厅->Apk的依赖关系,难度较大,代码逻辑实现相对