Unity3D--SDK接入一键打包APK

最近老接入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关闭因为会出现冲突的.

发布了22 篇原创文章 · 获赞 14 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/a13677972680/article/details/49816497