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關閉因爲會出現衝突的.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章