您的位置:首页 > 移动开发 > Unity3D

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

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关闭因为会出现冲突的.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  unity3D