项目进行中,领导要求能够进行一键设置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
}

暂时告一段落,并且执行无问题

最新文章

  1. 学习shell脚本笔记
  2. 【读书笔记】iOS-开发技巧-三种收起键盘的方法
  3. Android开发面试经——4.常见Android进阶笔试题(更新中...)
  4. angularjs页面传参
  5. linq递归
  6. bzoj 2401: 陶陶的难题I 数论
  7. FaceBook要在视频领域打败YouTube?
  8. Strange fuction--hdu2899
  9. 2016NEFU集训第n+3场 D - Bicycle Race
  10. 获取IP地址bash[转载]
  11. 【JavaWeb】Session(转)
  12. c# txt文件的读取和写入
  13. final model for bioinformatics
  14. 1.express中间件的简介
  15. 自动化测试-12.selenium的弹出框处理
  16. python中的import,reload,以及__import__
  17. M端错误提醒 -- pop 使用
  18. C语言基础第二次作业
  19. 目标反射回波检测算法及其FPGA实现(准备篇): 用Verilog-HDL状态机控制硬件接口
  20. 对视频播放软件KMplayer的评价

热门文章

  1. Docker跨主机网络——overlay
  2. hdu--1072--Nightmare(bfs回溯)
  3. java.lang.NoSuchMethodError:android.content.Context.getDrawable
  4. java 内存模型的理解
  5. Linux - 简明Shell编程13 - 用户输入(UserInput)
  6. shell 变量的使用
  7. Dbentry4.2连接MSSQL
  8. c++类大小问题
  9. 【Oracle】控制文件管理
  10. PhoneGap + Dreamweaver 5.5 无法在模拟器中打开的问题