129 lines
4.5 KiB
C#
129 lines
4.5 KiB
C#
|
|
using UnityEngine;
|
|||
|
|
using UnityEditor;
|
|||
|
|
using System.Collections;
|
|||
|
|
using System.IO;
|
|||
|
|
using System.Diagnostics;
|
|||
|
|
using Coolape;
|
|||
|
|
|
|||
|
|
/*
|
|||
|
|
* 1.获取LuaJIT!地址http://luajit.org/
|
|||
|
|
注意!!!!!============>>>>> uLua uses LuaJIT 2.0.2 which can be obtained from http://luajit.org/
|
|||
|
|
一定要下载LuaJIT 2.0.2 (当前release version 2.0.3)
|
|||
|
|
|
|||
|
|
2.解压下载的压缩包
|
|||
|
|
在terminal依次输入
|
|||
|
|
cd /Users/YourAccount/Download/LuaJIT-2.0.2
|
|||
|
|
make
|
|||
|
|
sudo make install
|
|||
|
|
luajit
|
|||
|
|
如果能看到luajit的版本号,到此mac上luajit环境就ok了!!!
|
|||
|
|
|
|||
|
|
3.通过luajit对所有lua文件进行编译,生成bytecode二进制文件
|
|||
|
|
find . -name "*.lua" -exec luajit -b {} {}.out \;
|
|||
|
|
{}.out 至于这个后缀,本人其实建议还是用lua
|
|||
|
|
|
|||
|
|
4.最后就是既关键!又简单!的一步!
|
|||
|
|
大家使用ulua,一般调用的是Lua.cs里的LuaState实例的DoString、DoFile
|
|||
|
|
如果想使用LuaJIT的bytecode文件,只需要调用LuaDLL.luaL_dofile(IntPtr luaState, string fileName)
|
|||
|
|
|
|||
|
|
本人亲测win、mac、android、ios均通过测试!!!解决了lua加密的问题!嘿嘿!
|
|||
|
|
|
|||
|
|
|
|||
|
|
本次测试正好确认了一件事!那就是ulua插件提供的库里已经把LuaJIT打进去了!
|
|||
|
|
*/
|
|||
|
|
public class ECLLuaEncodeTool
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// Luajits the encode.
|
|||
|
|
/// </summary>
|
|||
|
|
public static void luajitEncode ()
|
|||
|
|
{
|
|||
|
|
string path = AssetDatabase.GetAssetPath (Selection.activeObject);//Selection表示你鼠标选择激活的对象
|
|||
|
|
if (string.IsNullOrEmpty (path) || !File.Exists (path)) {
|
|||
|
|
UnityEngine.Debug.LogWarning ("请选择lua 文件!");
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
// luajitEncode (path);
|
|||
|
|
xxteaEncode (path);
|
|||
|
|
EditorUtility.DisplayDialog ("success", "Encode cuccess!", "Okey");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public static void luajitEncodeAll ()
|
|||
|
|
{
|
|||
|
|
string path = AssetDatabase.GetAssetPath (Selection.activeObject);//Selection表示你鼠标选择激活的对象
|
|||
|
|
if (string.IsNullOrEmpty (path) || !Directory.Exists (path)) {
|
|||
|
|
UnityEngine.Debug.LogWarning ("请选择目录!");
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
luajitEncodeAll (path);
|
|||
|
|
EditorUtility.DisplayDialog ("success", "Encode cuccess!", "Okey");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public static void luajitEncodeAll (string dir)
|
|||
|
|
{
|
|||
|
|
string[] fileEntries = Directory.GetFiles (dir);//因为Application.dataPath得到的是型如 "工程名称/Assets"
|
|||
|
|
string extension = "";
|
|||
|
|
foreach (string f in fileEntries) {
|
|||
|
|
extension = Path.GetExtension (f);
|
|||
|
|
extension = extension.ToLower ();
|
|||
|
|
if (extension != ".lua") {
|
|||
|
|
continue;
|
|||
|
|
}
|
|||
|
|
// luajitEncode (f);
|
|||
|
|
xxteaEncode (f);
|
|||
|
|
}
|
|||
|
|
string[] dirEntries = Directory.GetDirectories (dir);
|
|||
|
|
foreach (string d in dirEntries) {
|
|||
|
|
luajitEncodeAll (d);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public static void luajitEncode (string path)
|
|||
|
|
{
|
|||
|
|
string basePath = Application.dataPath;
|
|||
|
|
path = path.Replace ("Assets/", "/");
|
|||
|
|
string dir = Path.GetDirectoryName (path);
|
|||
|
|
string fname = Path.GetFileNameWithoutExtension (path);
|
|||
|
|
string fext = Path.GetExtension (path);
|
|||
|
|
string outPath = basePath + dir + "/" + fname + fext;
|
|||
|
|
outPath = outPath.Replace("\\", "/");
|
|||
|
|
outPath = outPath.Replace ("/upgradeRes4Dev", "/upgradeRes4Publish");
|
|||
|
|
Directory.CreateDirectory (Path.GetDirectoryName (outPath));
|
|||
|
|
#if UNITY_IOS
|
|||
|
|
byte[] bytes = XXTEA.Encrypt(File.ReadAllBytes(basePath + path), XXTEA.defaultKey);
|
|||
|
|
File.WriteAllBytes(outPath, bytes);
|
|||
|
|
#elif UNITY_ANDROID
|
|||
|
|
// string exeName = "/usr/local/bin/luajit";
|
|||
|
|
string exeName = "/usr/local/bin/luajit-2.0.4";
|
|||
|
|
// string exeName = "/usr/local/bin/luajit-2.0.3";
|
|||
|
|
// string exeName = "/usr/local/bin/luajit-2.1.0-alpha";
|
|||
|
|
if (!File.Exists (exeName)) {
|
|||
|
|
UnityEngine.Debug.LogError ("Ecode lua failed. file not fou" + exeName);
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
string arguments = "-b " + basePath + path + " " + outPath;
|
|||
|
|
Process.Start (exeName, arguments);
|
|||
|
|
//#else
|
|||
|
|
// byte[] bytes = XXTEA.Encrypt(File.ReadAllBytes(basePath + path), XXTEA.defaultKey);
|
|||
|
|
// File.WriteAllBytes(outPath, bytes);
|
|||
|
|
#endif
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public static void xxteaEncode (string path)
|
|||
|
|
{
|
|||
|
|
string basePath = Application.dataPath;
|
|||
|
|
path = path.Replace ("Assets/", "/");
|
|||
|
|
string dir = Path.GetDirectoryName (path);
|
|||
|
|
string fname = Path.GetFileNameWithoutExtension (path);
|
|||
|
|
string fext = Path.GetExtension (path);
|
|||
|
|
string outPath = basePath + dir + "/" + fname + fext;
|
|||
|
|
outPath = outPath.Replace("\\", "/");
|
|||
|
|
outPath = outPath.Replace ("/upgradeRes4Dev", "/upgradeRes4Publish");
|
|||
|
|
Directory.CreateDirectory (Path.GetDirectoryName (outPath));
|
|||
|
|
byte[] bytes = XXTEA.Encrypt (System.Text.Encoding.UTF8.GetBytes (File.ReadAllText (basePath + path)), XXTEA.defaultKey);
|
|||
|
|
File.WriteAllBytes (outPath, bytes);
|
|||
|
|
}
|
|||
|
|
}
|