unity3d在菜单栏,一键设置Player setting及自动打包并设置apk的存储位置
项目进行中,领导要求能够进行一键设置Player settings及自动打包并设置apk的位置,所以自己就上网搜索了很多大神的文章.最后是完成了领导需要的功能,在这里记录并分享一下(此项指针对安卓apk)
1.设置Player settings
参考1.1:https://docs.unity3d.com/ScriptReference/PlayerSettings.html(大家可以去看一下unity提供的API,下面只写一下,我用到的部分)
private static void SetBwPlayerSetting(string bundleIdentifier,string keyStoreName,string keystorePass="123456") {
PlayerSettings.companyName = COMPANYNAME;
PlayerSettings.productName = PRODUCTNAME;
PlayerSettings.applicationIdentifier = bundleIdentifier;// "com.playbyone.chyz.bw";
PlayerSettings.bundleVersion = BUNDLEVERSION;
PlayerSettings.Android.bundleVersionCode = BUNDLEVERSIONCODE;
PlayerSettings.Android.keystoreName = keyStoreName;
PlayerSettings.keystorePass = keystorePass;
}
上述代码能够改变图中红色框选的部分
2.更改Plugins-->Android下的sdk,因为,不同的渠道使用不同的sdk文件
参考2.1:https://www.2cto.com/kf/201601/487911.html (写的非常好的文件夹及文件的操作,我就不贴上自己写的不是太好的代码了,雨松大神下面的参考4.1里面也有文件夹的操作,喜欢的朋友可以自行选择操作)
3.检测Plugins-->Android下的sdk渠道更改完成
参考3.1:http://vr.99.com/news/01102017/002437218.shtml
参考3.2:http://www.ceeger.com/Script/AssetPostprocessor/AssetPostprocessor.OnPostprocessAllAssets.html
(也是参考了上述的文章,帮助很大,并且在参考3.1的基础上完成了自己的需求)
4.检测到文件已是最新的之后,开始执行打包命令
参考4.1:http://www.360doc.com/content/16/0326/11/7014874_545353578.shtml
(照例是看了雨松大神的打包,然后发现shell什么的完全不会,然后截选了里面自己能够使用的代码)
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEditor;
using UnityEngine; public class BwUnityScripsCompiling:AssetPostprocessor { //private static List<string> BuildApk = new List<string>();
private static bool BuildApk = false;
//private static bool BuildFinish = false; public static void StartBuildApk()
{
BuildApk = true;
//BuildFinish = false;
return;
}
/// <summary>
/// 进行update绑定
/// </summary>
static BwUnityScripsCompiling()
{
EditorApplication.update += Update;
}
/// <summary>
/// 检测导入.删除,移动,资源,使用 PlayerPrefs.SetInt进行存储
/// </summary>
/// <param name="importedAssets"></param>
/// <param name="deletedAssets"></param>
/// <param name="movedAssets"></param>
/// <param name="movedFromAssetPaths"></param>
public static void OnPostprocessAllAssets(
String[] importedAssets,
String[] deletedAssets,
String[] movedAssets,
String[] movedFromAssetPaths) {
List<string> importedKeys = new List<string>() { "Assets/Plugins/Android/StoreSDK" };// 可添加文件夹子集
for (int i = ; i < importedAssets.Length; i++) {
for (int j = ; j < importedKeys.Count; j++) {
if (importedAssets[i].Contains(importedKeys[j])) {
PlayerPrefs.SetInt("ImportScripts", );
return;
}
}
}
}
/// <summary>
/// 判断unity编译更新文件是否完成
/// </summary>
private static void Update() {
bool importScripts = Convert.ToBoolean(PlayerPrefs.GetInt("ImportScripts", ));
if (importScripts && !EditorApplication.isCompiling) {
OnUnityScripsCompilingCompleted();
importScripts = false;
PlayerPrefs.SetInt("ImportScripts", );
EditorApplication.update -= Update;
}
}
/// <summary>
/// unity文件编译完成之后,可执行打包动作
/// </summary>
private static void OnUnityScripsCompilingCompleted() {
Debug.Log("Unity Scrips Compiling completed.Start building........");
if (BuildApk == false)
return;
BuildApk = false;
BuildGameBag();
}
/// <summary>
/// 方法一:使用虚拟按键执行打包程序 执行:File-->Buile&Run
/// </summary>
/// <param name="bVk"></param>
/// <param name="bScan"></param>
/// <param name="dwFlags"></param>
/// <param name="dwExtraInfo"></param>
//[System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint = "keybd_event", SetLastError = true)]
//private static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, uint dwExtraInfo);
//public static void BuildGameBag()
//{
// const byte VK_CONTROL = 0x11;
// const byte VK_B = 0x42;
// const int KEYEVENTF_DOWN = 0x00;
// const int KEYEVENTF_KEYUP = 0x02; // keybd_event(VK_CONTROL, 0, KEYEVENTF_DOWN, 0);
// keybd_event(VK_B, 0, KEYEVENTF_DOWN, 0);
// keybd_event(VK_B, 0, KEYEVENTF_KEYUP, 0);
// keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
//} //在这里找出你当前工程所有的场景文件,假设你只想把部分的scene文件打包 那么这里可以写你的条件判断 总之返回一个字符串数组。
static string[] GetBuildScenes()
{
List<string> names = new List<string>();
foreach (EditorBuildSettingsScene e in EditorBuildSettings.scenes)
{
if (e == null)
continue;
if (e.enabled)
{
names.Add(e.path);
//Debug.LogError("参与打包场景的路径:" + e.path);
}
}
//Debug.LogError("添加的场景的个数为:" + names.Count);
return names.ToArray();
} /// <summary>
/// 方法二:利用unity3d自带API执行打包程序 执行:File-->Build
/// </summary>
public static void BuildGameBag()
{
//Debug.LogError("测试自动打包Android::BuildForAndroid1()"); PlayerSettings.SetScriptingDefineSymbolsForGroup(BuildTargetGroup.Android, "BW");//设置标签,打包的为Android
string path = "C:/Users/Administrator/Desktop/Productvivo11.apk";//Path.GetFullPath(".") + "/Product2.apk"; // Debug.LogError("这是打完之后的包,存放的路径:" + path);
BuildPipeline.BuildPlayer(GetBuildScenes(), path, BuildTarget.Android, BuildOptions.None);//开始进行打包...... // Debug.LogError("测试自动打包Android::BuildForAndroid2()"); } }
5.打包完成之后的检测可进行自己想要的操作
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEditor.Callbacks;
using UnityEngine; public static class BwPostProcess { #if UNITY_EDITOR
[PostProcessBuild()]
public static void OnPostProcessBuild(BuildTarget target, string pathToBuiltProject)
{ if (target == BuildTarget.Android)
{
//在里面可以进行自己想要的操作
}
}
#endif
}
暂时告一段落,并且执行无问题
unity3d在菜单栏,一键设置Player setting及自动打包并设置apk的存储位置的更多相关文章
- 播放器设置 Player Settings
原地址:http://game.ceeger.com/Manual/class-PlayerSettings.html#Android Player Settings is where you def ...
- 17.1.1.1 Setting the Replication Master Configuration 设置复制的master 配置:
17.1.1.1 Setting the Replication Master Configuration 设置复制的master 配置: 在一个复制master,你必须启用binary loggin ...
- 一键安装 redmine on windows 和发邮件设置
一键安装 redmine on windows 和发邮件设置 1)使用http://bitnami.org/stack/redmine一键安装redmine (windows). 2)修改下面的文件: ...
- Python小游戏——外星人入侵(保姆级教程)第一章 01创建Pygame窗口 02创建设置类Setting()
系列文章目录 第一章:武装飞船 01:创建Pygame窗口以及响应用户输入 02:创建设置类Setting() 一.前期准备 1.语言版本 Python3.9.0 2.编译器 Pycharm2022 ...
- cocos2d-x3.9利用cocos引擎一键打包Android平台APK(C++小白教程)
链接地址:http://www.cocoachina.com/bbs/read.php?tid=333937 cocos2d-x3.9利用cocos引擎一键打包Android平台APK(C++小白教程 ...
- 禁止Cnario Player启动后自动开始播放
Cnario Player安装激活后, 默认开机后自动启动, 启动加载内容完成后进入10秒倒计时, 10秒后即开始播放关机前播放的内容. 如果不想让其自动开始播放, 可按照如下办法设置其不自动播放. ...
- webstorm设置修改文件后自动编译并刷新浏览器页面
转载:http://www.cnblogs.com/ssrsblogs/p/6155747.html 重装了 webstorm ,从10升级到了2016 一升不要紧,打开老项目,开启webpakc-d ...
- Spring Boot 应用使用spring session+redis启用分布式session后,如何在配置文件里设置应用的cookiename、session超时时间、redis存储的namespace
现状 项目在使用Spring Cloud搭建微服务框架,其中分布式session采用spring session+redis 模式 需求 希望可以在配置文件(application.yml)里设置应用 ...
- APUE学习之三个特殊位 设置用户ID(set-user-ID),设置组ID(set-group-ID),sticky
设置用户ID(set-user-ID),设置组ID(set-group-ID),sticky set-user-ID: SUID 当文件的该位有设置时,表示当该文件被执行时,程序具有文件 ...
随机推荐
- Warning[w2]: Symbol ?P…
屏蔽的方法: 一.找到$PROJ_DIR$\..\..\..\Tools\CC2530DB\f8w2530.xcl位置 二.找到f8w2530.xcl 三.打开f8w2530.xcl,注释D?PBAN ...
- [js高手之路] es6系列教程 - 对象功能扩展详解
第一:字面量对象的方法,支持缩写形式 //es6之前,这么写 var User = { name : 'ghostwu', showName : function(){ return this.nam ...
- (5)UIView常见属性
此时打印的所有子控件会把使用自动布局的控件也打印出来,不准确,所以得去掉这两个选项,再进行打印 使用实例如下: viewWithTag的注意点,当有多个相同的Tag值时,它是先找到第一个Tag值,而不 ...
- java中List Array相互转换
List to Array List 提供了toArray的接口,所以可以直接调用,转为object型数组 List<String> list = new ArrayList<Str ...
- 【有意思的BUG】未名
这个帖子描述定位一个BUG的思路. 开始了. 用浏览器访问某一个网址http://111.aaa.com/ ,如果发现提示异常,那么接下来该如何定位BUG呢? 用相同的浏览器去访问不同域(不是aaa. ...
- MySQL执行计划extra中的using index 和 using where using index 的区别
本文出处:http://www.cnblogs.com/wy123/p/7366486.html (保留出处并非什么原创作品权利,本人拙作还远远达不到,仅仅是为了链接到原文,因为后续对可能存在的一些错 ...
- SEO配置信息操作文档
一.title(网站标题) title,就是浏览器上显示的那些内容,不仅用户能看到,也能被搜索引擎检索到(搜索引擎在抓取网页时,最先读取的就是网页标题,所以title是否正确设置极其重要.)title ...
- javascript多种方法实现数组去重
先说说这个实例的要求:写一个方法实现数组的去重.(要求:执行方法,传递一个数组,返回去重后的新数组,原数组不变,实现过程中只能用一层循环,双层嵌套循环也可写,只做参考): 先给初学者解释一下什么叫数组 ...
- Charles使用(一)
Charles使用(一) 1.什么是Charles Charles是在MAC下常用的网络封包截取工具,在做移动开发时,是为了调试与服务端的网络通信协议,常常需要截取网络包来分析.Charles是通 ...
- 安卓APP测试容易忽略的地方
我们手机APP测试,主要针对的是android和ios两大主流操作系统,总体上来说android手机型号.版本多,bug也多:ios相对bug少.下面就针对Android说一下最容易忽略的测试点吧. ...