Files
tianrunCRM/Assets/CoolapeFrame/Editor/Tools/ECLLuaEncodeTool.cs

129 lines
4.5 KiB
C#
Raw Normal View History

2020-07-04 14:41:25 +08:00
using UnityEngine;
using UnityEditor;
using System.Collections;
using System.IO;
using System.Diagnostics;
using Coolape;
/*
* 1.LuaJIThttp://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.
使uluaLua.cs里的LuaState实例的DoStringDoFile
使LuaJIT的bytecode文件LuaDLL.luaL_dofile(IntPtr luaState, string fileName)
winmacandroidios均通过测试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);
}
}