Unity自动打包Android其实要比IOS容易得多,因为Android不用先生成java工程,然后在构建.apk包,我先说说Android打包的步骤。

1.把sdk拷贝至Plugins/Android下。

如下图所示,如果你做过Android源生开发,我相信下面的东西你不会陌生。可是如果你没做过Android原生开发,我还是详细说明以下。

AndroidManifest:这是Android程序必不可少的文件,这里记录着应用程序的启动Activity。Activity就是Android的一个界面,一般应用程序会有很多Acitivty,来回切换界面。但是游戏就不太一样了,因为游戏只需要一个Activity 一个View就可以了。(扯远了)

AndroidManifest:里面还记录着应用程序的权限,Service啊什么的,,有兴趣的同学可以谷歌搜一搜。

每次打包的时候Unity会用它默认的AndroidManifest,它默认的AndroidManifest在 unity.app/Contents/PlaybackEngines/AndroidPlayer下面。当你在进行打包apk的时候 unity会拷贝该路径下的所有参数。

在ProjectSetting里面勾选一些权限的时候,Unity会自动帮你修改AndroidManifest里面的权限,但是如果某个权限不能在Unity工程里面修改,那么就需要自己手动替换。如下图所示,我们把AndroidManifest放在Plugins/Android下面, 这样Unity在进行打包的时候就不会用它默认的,而是用我自己新写的打包。。这样就方便灵活很多了。。

bin:下面就记录着sdk用到的第三方jar

res:下面就是安卓的一些图片,资源啊什么。

你可以随便解开一个android的APK看看它的目录结构就明白了。。

这样在打包的时候unity就会自动把Plugins/Android下面的所有资源打包在你的APK里面了。但是如果你做渠道包的时候,每个包用的是不同的sdk,所以你需要在打包不同渠道的时候把相关的文件拷贝在Plugins/Android下面。

如下图所示,我在根目录下创建一个文件夹名子叫91,当我自动化打包的时候自动把91文件夹下面的资源先拷贝在Plugins/Android下面,然后在自动打包。。 打完包以后再把Plugins/Andoird文件夹清空即可。。

Ok上脚本。。代码和上一篇文章的第一步差不多,我就不多余注释,,执行下面shell脚本将自动打开unity,然后执行ProjectBuild.BuidForAndroid方法。。 project-$1 就是传入的参数。。

C#

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

#!/bin/sh

#参数判断

if[$# != 1 ];then

echo"需要一个参数。 参数是游戏包的名子"

exit

fi

#UNITY程序的路径#

UNITY_PATH=/Applications/Unity/Unity.app/Contents/MacOS/Unity

#游戏程序路径#

PROJECT_PATH=/Users/MOMO/commond

#在Unity中构建apk#

$UNITY_PATH-projectPath$PROJECT_PATH-executeMethodProjectBuild.BuildForAndroidproject-$1-quit

echo"Apk生成完毕"

在关闭unity的情况下运行。在命令行里面执行这一条脚本, 参数一个参数 91。

C#

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

usingSystem.Collections;

usingSystem.IO;

usingUnityEditor;

usingUnityEngine;

usingSystem.Collections.Generic;

usingSystem;

classProjectBuild:Editor{

//在这里找出你当前工程所有的场景文件,假设你只想把部分的scene文件打包 那么这里可以写你的条件判断 总之返回一个字符串数组。

staticstring[]GetBuildScenes()

{

Listnames=newList();

foreach(EditorBuildSettingsSceneeinEditorBuildSettings.scenes)

{

if(e==null)

continue;

if(e.enabled)

names.Add(e.path);

}

returnnames.ToArray();

}

staticvoidBuildForAndroid()

{

Function.DeleteFolder(Application.dataPath+"/Plugins/Android");

if(Function.projectName=="91")

{

Function.CopyDirectory(Application.dataPath+"/91",Application.dataPath+"/Plugins/Android");

PlayerSettings.SetScriptingDefineSymbolsForGroup(BuildTargetGroup.Android,"USE_SHARE");

}

stringpath=Application.dataPath+"/"+Function.projectName+".apk";

BuildPipeline.BuildPlayer(GetBuildScenes(),path,BuildTarget.Android,BuildOptions.None);

}

}

程序会执行BuildForAndroid的方法,这里我把shell传入的参数取出来。根据传入的不同参数来初始化打包的一些设置。。

最终BuildPlayr就开始构建apk,第二个参数就是打包出apk保存的路径。 在打包之前你可以处理一些 游戏包名, 游戏icon 等等一些平台之间的特殊性 ,也可以设置一些 预定义标签,。

C#

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

usingUnityEngine;

#if UNITY_EDITOR

usingUnityEditor;

usingUnityEditor.Callbacks;

usingUnityEditor.XCodeEditor;

usingSystem.Xml;

#endif

usingSystem.IO;

publicstaticclassXCodePostProcess

{

#if UNITY_EDITOR

[PostProcessBuild(100)]

publicstaticvoidOnPostProcessBuild(BuildTargettarget,stringpathToBuiltProject)

{

if(target==BuildTarget.Android)

{

Function.DeleteFolder(Application.dataPath+"/Plugins/Android");

if(Function.projectName=="91")

{

//当我们在打91包的时候 这里面做一些 操作。

}

}

}

#endif

}

在回到XUPortr里面,当Android打包完毕后,这里我们清空Plugins/Android文件夹。。或者你也可以做一些操作。。

Function.cs 用到的一个工具类

C#

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

usingUnityEngine;

usingSystem.Collections;

usingSystem.IO;

publicclassFunction{

//得到项目的名称

publicstaticstringprojectName

{

get

{

//在这里分析shell传入的参数, 还记得上面我们说的哪个 project-$1 这个参数吗?

//这里遍历所有参数,找到 project开头的参数, 然后把-符号 后面的字符串返回,

//这个字符串就是 91 了。。

foreach(stringarginSystem.Environment.GetCommandLineArgs()){

if(arg.StartsWith("project"))

{

returnarg.Split("-"[0])[1];

}

}

return"test";

}

}

publicstaticvoidDeleteFolder(stringdir)

{

foreach(stringdinDirectory.GetFileSystemEntries(dir))

{

if(File.Exists(d))

{

FileInfofi=newFileInfo(d);

if(fi.Attributes.ToString().IndexOf("ReadOnly")!=-1)

fi.Attributes=FileAttributes.Normal;

File.Delete(d);

}

else

{

DirectoryInfod1=newDirectoryInfo(d);

if(d1.GetFiles().Length!=0)

{

DeleteFolder(d1.FullName);递归删除子文件夹

}

Directory.Delete(d);

}

}

}

publicstaticvoidCopyDirectory(stringsourcePath,stringdestinationPath)

{

DirectoryInfoinfo=newDirectoryInfo(sourcePath);

Directory.CreateDirectory(destinationPath);

foreach(FileSystemInfofsiininfo.GetFileSystemInfos())

{

stringdestName=Path.Combine(destinationPath,fsi.Name);

if(fsiisSystem.IO.FileInfo)

File.Copy(fsi.FullName,destName);

else

{

Directory.CreateDirectory(destName);

CopyDirectory(fsi.FullName,destName);

}

}

}

}

如下图所示,脚本运行完毕,你打包的APK就静静的放在了这里,怎么样?简单吧?嘿嘿。。

注意事项:

1、因为你的工程可能比较大,如果IOS和Android同时打包的话切个平台都要半个多小时,我建议的svn在本地check out 两个工程,一个切在ios 一个切在Android  打包的时候分开打。

2.执行shell脚本的时候请关闭保存unity工程。

3.Android 因为不受证书的限制,我上传的工程建议你下载下来看看,肯定可以直接打出来包。。

4.我建议打包的机器使用mac。 因为windows不能打包IOS 而MAC可以同时 打包 IOS 和 Android

最后雨松MOMO祝大家学习愉快,哇咔咔。

最后编辑:2014-06-12作者:雨松MOMO

专注移动互联网,Unity3D游戏开发

捐 赠写博客不易,如果您想请我喝一杯星巴克的话?就进来看吧!

java编写自动化脚本生成apk_Unity3D研究院之Android全自动打包生成apk(六十九)相关推荐

  1. 使用nodejs编写自动化脚本,真香!

    使用nodejs编写自动化脚本,真香! 说到写脚本,最为人熟知的语言必然是shell,再者python,当然现在也出现了很多界面友好,支持可视化拖动编写脚本的软件,如quiker等.但本文要介绍的是n ...

  2. js array formdata_开源软件分享:一个免ROOT支持用JS编写自动化脚本的神器

    最近在逛github时发现一个不错的安卓开源项目,支持用javascript编写自动化脚本,可以模拟人工点击.滑动等一系列操作. auto.js Auto.js 简介 一个支持无障碍服务的Androi ...

  3. java eclipse生成apk,将Eclipse Android项目打包成APK文件

    将Eclipse Android项目打包成APK文件是本文要介绍的内容,主要是来了解并学习Eclipse Android打包的内容,具体关于Eclipse Android内容的详解来看本文. Ecli ...

  4. Android Studio打包生成APK

    Android Studio打包生成APK 当我们编写好代码,测试号应用后,需要在真机环境下测试,这个时候要生成apk,具体步骤如下: 如图,点击Build > Generate Signed ...

  5. 《Android studio 创建生成keystore SHA1值的申请 高德地图key值申请 android studio 打包生成apk》

    开发背景:目前做车载项目,领导要求用高德地图.整理了一下,差不多就是下面的目录: 一.创建生成keystore: 二.SHA1值的申请: 三.高德地图key值申请: 四.android studio ...

  6. Android项目打包生成apk文件

    Android开发打包生成APK文件 打包apk文件分为两种 无需密钥的apk 有密钥的apk(常规) 他们的区别只是就是安全问题. 1.没有密钥的apk 点击之后会自动生成没有密钥的APK. 在编辑 ...

  7. Python+Appium自动化测试-编写自动化脚本

    我们实际跑自动化脚本的过程中,是需要用脚本调用appium启动app的,接下来就尝试写Python脚本启动app并登陆app.环境为Windows10 + Python3.7 + appium1.18 ...

  8. Java script生成apk_Android 命令行编译、打包生成apk文件

    一.搭建搭建环境 1. 安装JDK 和 Android SDK 2. 配置环境变量 D:\android-sdk-windows\tools C:\Program Files\Java\jdk1.6. ...

  9. python写安卓游戏辅助软件_GitHub - Jinnrry/RobotHelper: 安卓游戏自动化脚本框架|Automated script for Android games...

    RobotHelper 这是做什么的? 一个安卓自动化脚本的框架.包含了自动化辅助开发常用的点击,找点,文字识别等功能.具体开发说明参见 wiki 该框架主要是方便Android游戏.爬虫项目的快速开 ...

最新文章

  1. cocoahttpserver 载入本地html,利用CocoaHttpServer搭建手机本地服务器
  2. .NET+IIS+MSSQL配置
  3. linux 挂载错误 mount: unknown filesystem type LVM2_member 解决方法
  4. CodeForces - 1303E Erase Subsequences(dp)
  5. Log4j比较全面的配置
  6. 大学计算机思维导图_【21计算机考研】改考408+1!上海电力大学翻倍扩招,仍考数据结构!...
  7. Visual Studio 2015 移动跨平台开发初体验
  8. Android(java)学习笔记97:使用GridView以及重写BaseAdapter
  9. node.js(一)基础介绍
  10. wowza拉流和推流接口备忘
  11. 谷歌生物医学专用翻译_【小虎聊干货】八大翻译软件大揭秘,告诉你科研翻译的正确打开方式...
  12. 【实验室顾问】俞扬教授 (CCF-IEEE CS青年科学家奖获得者)
  13. 新一代云数据库的引领者---AWS
  14. 督办管理系统——让企业工作落实到位
  15. three.js 相对坐标的设置
  16. MTK平台如何决定SensorMode
  17. 老年人也能解决智能技术困难问题
  18. 邮箱 万维网通讯 smtp
  19. android 9 qq登录,【报Bug】安卓离线打包targetSdkVersion设置28时,在安卓9.0手机上QQ授权登录闪退...
  20. 分词 - 准确率评测

热门文章

  1. CSP认证201312-5 I’m stuck![C++题解]:dfs、两次dfs
  2. npp夜光数据介绍 viirs_惊艳!珞珈一号卫星“眼中”的夜光衡水
  3. leetcode 4. 寻找两个有序数组的中位数,c语言
  4. 15支持哪些数据库版本 tfs_我司虚拟主机支持脚本及数据库版本一览表
  5. vue重启node_【ts】vue-typescript-admin类型any仍然报错
  6. oracle 27504,ora-27504 ora-27300 ora-27301 ora-27302
  7. 存储组件的实现思路分析及代码实现
  8. 互斥信号量的等待与通知
  9. 使用VC 2010制作和使用静态库
  10. java rgb hsl_RGB、HSB、HSL 互相转换算法