最近老接入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關閉因爲會出現衝突的.