unity打包apk相对来说比较容易,相信出过的人都明白,出包过程,没有大的难度,一步一操作,一步一等待,繁琐耗时,不懂的人又代替不了。这时候需求就来了,如何简单的一键打包搞定,这个就稍微有点难度,当然作为程序员就是要解决这些问题,封装变化,变繁为简。
$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目录下有这个方法,出包时会自动调用,可以在这里设置obb的使用上的还有一点小小的坑,Google play商店在下载游戏的时候,会自动下载apk所需的obb,但是有时候也不能保证一定成功,所以需要项目本身就具有这样的检测下载功能https://www.assetstore.unity3d.com/en/#!/content/3189这里有非常详细的代码,可以copy直接使用
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工程
到官方主页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
key.store=./config/xxx.keystore
key.alias=xxx
key.store.password=xxx
key.alias.password=xxx
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)