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 当文件的该位有设置时,表示当该文件被执行时,程序具有文件 ...
随机推荐
- RF+Appium框架自动化测试系列一之(Mac下Appium环境搭建)万事开头难
消失了3个月,有一段时间没来园子更新博客了,各位看官见谅哈哈,消失是因为刚换了工作环境没外网,好多笔记没能及时的记录分享,以后有时间慢慢补上吧,这段时间主要接触了移动端app的自动化测试,公司为了快速 ...
- [js高手之路] es6系列教程 - 函数的默认参数详解
在ES6之前,我们一般用短路表达式处理默认参数 function show( a, b ){ var a = a || 10; var b = b || 20; console.log( a, b ) ...
- Fiddler基础使用二之捕获手机应用https请求
Fiddler是一款非常流行并且实用的http抓包工具,它的原理是在本机开启了一个http的代理服务器,然后它会转发所有的http请求和响应, 因此,它比一般的firebug或者是chrome自带的抓 ...
- Comparable与Comparator,java中的排序与比较
1:比较和排序的概念 比较:两个实体类之间按>,=,<进行比较. 排序:在集合类中,对集合类中的实体进行排序.排序基于的算法基于实体类提供的比较函数. 基本型别都提供了默认的比较算法,如s ...
- java IO流整理
Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...
- 1.three.js世界的4大要素
一.三大组件 在Three.js中,要渲染物体到网页中,我们需要3个组建:场景(scene).相机(camera)和渲染器(renderer).有了这三样东西,才能将物体渲染到网页中去. 记住关建语句 ...
- 如何解压 Mac OS X 下的 PKG 文件(网摘)
如何解压 Mac OS X 下的 PKG 文件 原文出处:[Macplay] 有时候我们可能需要解包 PKG 格式的安装文件包,在 OS X 系统下完成该操作并不需要你额外再安装软件,系统内置的命令就 ...
- 浅谈C#中的斐波拉契数列
突然对那些有趣的数学类知识感兴趣了,然后就简单研究了一下斐波拉契数列,看看它的有趣之处! 斐波拉契数列(Fibonacci Sequence),又称黄金分割数列,该数列由意大利的数学家列奥纳多·斐波那 ...
- 打造基于Clang LibTooling的iOS自动打点系统CLAS(二)
1. 配置LLVM和Clang 在这篇文章里,我们会基于上一篇所述的方案进行展开,详细讲解如何从0开始创建一个基于Clang LibTooling的编译器前端工具.在开始之前,我们假设你已经基本了解何 ...
- 【Maven】构建war包时排除web.xml
在使用maven构建项目的war包时,有时并不需要src/webapp/WEB-INF/下的一些文件. 这时可以通过maven-war-plugin创建配置来排除这些文件.下面贴出我平时使用的pom. ...