Files
tianrunCRM/Assets/CoolapeFrame/Editor/Tools/ECLLuaEncodeTool.cs
2020-07-04 14:41:25 +08:00

129 lines
4.5 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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);
}
}