Unity3D--SDK接入一键打包APK

来源:互联网 发布:淘宝刷心悦会员封号 编辑:程序博客网 时间:2024/05/16 17:29

最近老接入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 就会自动在你设置的目录中导出安卓工程了,当然请注意这并不是我所说的一键打包,实际上我们并用不上这个功能.

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); }&nbsp;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关闭因为会出现冲突的.

0 0