Unity3D--SDK接入一键打包APK
2015-11-13 13:18
811 查看
最近老接入SDK但是发现实在是太麻烦了,我们现在接入SDK后需要导入可用的apk,首先需要把做好的JAR也就是你所接入的第三方SDK放到U3D的工程目录的 \Assets\Plugins\Android\bin 目录下,然后再使用U3D导出安卓工程.可能很多会说为什么不直接打包APK呢?
U3D不是可以直接编译出APK文件吗? 在这里我想告诉大家如果直接使用U3D编译出APK文件那么编译出来的文件可能调用不了你所接入的SDK,如果你所接入的SDK所需要的资源文件不是在你的jar的根目录下那么就可能找不到路径,是的 就是这么操蛋的.
所以这就是为什么我们要导出安卓工程,然后使用Eclipse 进行编译APK文件了.就是为了安全起见,因为我再不想因为一点不该出现的错误导致一个问题弄一天的情况,那真是太打击自信心了,特别是像接SDK这样的麻烦并且带有很多不确定性的事.
好了到这里可能你们还不知道为什么会很麻烦,那么请听我说,现在的 程序基本是这样jar->放入U3D->U3D导出安卓工程->Eclipse->apk
但是,当你接入的SDK出问题了,测试不通过了,计费需要改了,那么你需要做的就是 使用Eclipse->修改jar工程-> jar->放入U3D->U3D导出安卓工程->Eclipse->apk, 是的每次出现问题你都需要这样从新打包然后放到真机上进行测试.发现出现问题然后你的内心是崩溃的, 因为你又需要不断的重复那些该死的步骤.
好了现在有一个工具可以让你们一键搞定直接编译出apk文件不需要经历那些恶心的步骤了,只需要配置一下文件,然后批处理他们.
首先需要在U3D中放入一个插件,这个插件的功能就是可以一键导出安卓工程,插件代码如下,当你把这段代码的CS文件放到\Assets\Editor的目录下时会自动在U3D的菜单栏出现GameBuilder选项然后你可以单击选项下面的BuildForAndroid 就会自动在你设置的目录中导出安卓工程了,当然请注意这并不是我所说的一键打包,实际上我们并用不上这个功能.
好的 现在第一步已经完成,请记住一定要根据自己的情况修改上面的代码,然后放入U3D中. 然后下一步就是 使用python 代码来启动U3D然后导出安卓工程然后再python使用ant打包出APK文件并且重新签名,
不懂python并不是很重要,因为它很简单,基本像你们聪明的程序员都看的懂.
然后就是使用这段代码改成你自己的设置然后 新建一个 .py为后缀的文件复制到里面剩下的就是安装python环境了,安装ANT 然后需要注意的是 需要在环境变量path中加入它们的安装路径然后 就到了最关键的一步了你只需要把你的 .py文件放到相应的目录下然后执行他,只需要双击它执行那么一切都搞定了 直接编译出APK到你设置好的目录.那么当你需要修改JAR时只需要把修改好的JAR放到U3D工程目录下,然后执行.py文件就OK了.
安装包和代码下载:
http://pan.baidu.com/s/1sj03C8P
注意:当你执行.py文件时最好把U3D关闭因为会出现冲突的.
U3D不是可以直接编译出APK文件吗? 在这里我想告诉大家如果直接使用U3D编译出APK文件那么编译出来的文件可能调用不了你所接入的SDK,如果你所接入的SDK所需要的资源文件不是在你的jar的根目录下那么就可能找不到路径,是的 就是这么操蛋的.
所以这就是为什么我们要导出安卓工程,然后使用Eclipse 进行编译APK文件了.就是为了安全起见,因为我再不想因为一点不该出现的错误导致一个问题弄一天的情况,那真是太打击自信心了,特别是像接SDK这样的麻烦并且带有很多不确定性的事.
好了到这里可能你们还不知道为什么会很麻烦,那么请听我说,现在的 程序基本是这样jar->放入U3D->U3D导出安卓工程->Eclipse->apk
但是,当你接入的SDK出问题了,测试不通过了,计费需要改了,那么你需要做的就是 使用Eclipse->修改jar工程-> jar->放入U3D->U3D导出安卓工程->Eclipse->apk, 是的每次出现问题你都需要这样从新打包然后放到真机上进行测试.发现出现问题然后你的内心是崩溃的, 因为你又需要不断的重复那些该死的步骤.
好了现在有一个工具可以让你们一键搞定直接编译出apk文件不需要经历那些恶心的步骤了,只需要配置一下文件,然后批处理他们.
首先需要在U3D中放入一个插件,这个插件的功能就是可以一键导出安卓工程,插件代码如下,当你把这段代码的CS文件放到\Assets\Editor的目录下时会自动在U3D的菜单栏出现GameBuilder选项然后你可以单击选项下面的BuildForAndroid 就会自动在你设置的目录中导出安卓工程了,当然请注意这并不是我所说的一键打包,实际上我们并用不上这个功能.
sing UnityEngine; using UnityEditor; using System.Collections; using System.IO; /// <summary> /// Build /// </summary> class GameBuilder{ // 输出路径 private const string BuildPath = "E:/fastbuild/export project";//此项为你需要输出的安卓工程的路径 [MenuItem("GameBuilder/BuildForAndroid")] public static void BuildForAndroid() { // 如果不是android平台,转为android平台 if (EditorUserBuildSettings.activeBuildTarget != BuildTarget.Android) { EditorUserBuildSettings.SwitchActiveBuildTarget(BuildTarget.Android); } // 允许读写SD卡 PlayerSettings.Android.forceSDCardPermission = true; // 设置 keystore 信息根据自己的KEY设置 PlayerSettings.Android.keystoreName = "hai.keystore"; PlayerSettings.Android.keystorePass = "123"; PlayerSettings.Android.keyaliasName = "123"; PlayerSettings.Android.keyaliasPass = "123"; // 充许调试 开发 外部修改 BuildOptions options =BuildOptions.AcceptExternalModificationsToPlayer; // 添加一个叫Debug的宏 PlayerSettings.SetScriptingDefineSymbolsForGroup(BuildTargetGroup.Android, ""); // 设置标识符 PlayerSettings.bundleIdentifier = "com.nczl.fishgame.yy";//此项为当你导出安卓工程时的包名; string scenePath ="/Game/Scenes"; // 添加场景 ArrayList scenes = GetScenesNames(scenePath); /*{ "Assets/Game/Scenes/Main.unity", "Assets/Game/Scenes/Game_shark.unity", "Assets/Game/Scenes/Game_nomal.unity", "Assets/Game/Scenes/Loading.unity", }; */ // 检查输出路径存在则删除; if (!System.IO.Directory.Exists(BuildPath)) { // System.IO.Directory.Delete(BuildPath); System.IO.Directory.CreateDirectory(BuildPath); } if (scenes != null) // 输出! BuildPipeline.BuildPlayer(scenes.ToArray() as string[], BuildPath, BuildTarget.Android, options); else Debug.LogError("当前场景获取错误!"); } public static ArrayList GetScenesNames(string fileName) { string path = Application.dataPath+fileName; string getFilesFilter = "*.unity"; ArrayList sceneName=new ArrayList(); DirectoryInfo di = new DirectoryInfo(path); if (di.Exists) { foreach (FileInfo fileInfo in di.GetFiles(getFilesFilter)) { sceneName.Add(fileInfo.FullName); } } return sceneName; } }
好的 现在第一步已经完成,请记住一定要根据自己的情况修改上面的代码,然后放入U3D中. 然后下一步就是 使用python 代码来启动U3D然后导出安卓工程然后再python使用ant打包出APK文件并且重新签名,
不懂python并不是很重要,因为它很简单,基本像你们聪明的程序员都看的懂.
# -*- coding: gb18030 -*- import os, shutil # 定义一个函数,从Unity中输出Android工程文件 def BuildAndroid( unityPath, projectPath, logPath ): print('start build') # 更改当前路径位置 os.chdir('E:/fastbuild') # 如果当前工程已经存在,删除这个工程 if os.path.exists('./export projectMz'): shutil.rmtree('./export projectMz') # 将Unity可执行文件添加到环境变量路径 os.putenv("path",unityPath); #os.chdir(projectpath) # unity命令行 command = 'Unity.exe -quit -batchmode -projectPath {0} -logFile {1} -executeMethod GameBuilder.BuildForAndroid'.format(projectPath,logPath) # 执行命行令 os.system(command) # 备份文件位置 source = './UnityPlayerNativeActivity.java' # 目标文件位置 #coding:utf-8 target ='./export projectMz/街机online/src/com/nczl/fishgame/mz/UnityPlayerNativeActivity.java' # 复制 ''' shutil.copy(source,target) ''' # 更新当前路径到输出的android工程路径 # 更改当前路径位置 os.chdir('./export projectMz/街机online') # 检查是否已经存在build.xml文件 if os.path.exists('./build.xml'): os.remove('./build.xml' ) # 添加android和ant批处理环境变量 os.putenv("path",'D:/adt-bundle-windows-x86-20140702/sdk/tools;D:/apache-ant-1.9.4/bin') # 更新android工程 os.system('android update project --target 2 --path ./ --name Fishing3NetActivity') # 添加数字签名 #coding:utf-8 with open('local.properties','a' ) as f: # 签名文件的路径 f.write('key.store=../../hai.keystore\n') #签名文件的别名 f.write('key.alias=123\n') #签名文件密码 f.write('key.store.password=123\n') #别名密码 f.write('key.alias.password=123\n') os.system('ant clean') #使用ANT打包 os.system('ant release') print('build complete') # Unity路径 unitypath='D:/Program Files (x86)/Unity/Editor' # Unity工程路径 projectpath='E:/fastbuild/oldfish1' # Log存放位置 logpath='E:/fastbuild/buildlog1.txt' BuildAndroid(unitypath, projectpath, logpath)
然后就是使用这段代码改成你自己的设置然后 新建一个 .py为后缀的文件复制到里面剩下的就是安装python环境了,安装ANT 然后需要注意的是 需要在环境变量path中加入它们的安装路径然后 就到了最关键的一步了你只需要把你的 .py文件放到相应的目录下然后执行他,只需要双击它执行那么一切都搞定了 直接编译出APK到你设置好的目录.那么当你需要修改JAR时只需要把修改好的JAR放到U3D工程目录下,然后执行.py文件就OK了.
安装包和代码下载:
http://pan.baidu.com/s/1sj03C8P
注意:当你执行.py文件时最好把U3D关闭因为会出现冲突的.
相关文章推荐
- Kinect结合Unity3D引擎开发体感游戏(一)
- Unity3D中脚本的执行顺序和编译顺序
- Unity3D动态对象优化代码分享
- Unity3D获取当前键盘按键及Unity3D鼠标、键盘的基本操作
- Unity3d获取系统时间
- unity3d发布apk在android虚拟机中运行的详细步骤(unity3d导出android apk)
- Unity3D游戏引擎实现在Android中打开WebView的实例
- unity3d调用手机或电脑摄像头
- Unity3d发布IOS9应用时出现中文乱码的解决方法
- 分享一个开源的网络游戏服务器架构—HouHai
- Unity3D插件详细评测及教学下载
- Unity3D上路_01-2D太空射击游戏
- Unity3D上路_02-第一视角射击游戏
- Unity3D上路_03-塔防游戏
- Unity3D上路_04-基础资源介绍
- Unity3D上路_05-网络相关