IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> android下使用java代码将streamingasset下的文件拷贝到persistence下——2 -> 正文阅读

[移动开发]android下使用java代码将streamingasset下的文件拷贝到persistence下——2

java的代码:https://blog.csdn.net/zhangminflying/article/details/22098779

 private void copyDir(final Context activity, String sourcePath, String destPath) {
        Log.i("sourcepath="+sourcePath, "destpath="+destPath);
        String[] files;
        try {
            files = activity.getAssets().list(sourcePath);
            if (files.length == 0)
            {
                copyFile(activity, sourcePath, destPath);
            }
            else
            {
                String filePath = destPath +"/"+sourcePath;
                File file = new File(filePath);
                file.mkdirs();
                for (int i = 0; i < files.length; i++)
                {
                    String[] files2 = activity.getAssets().list(sourcePath+"/"+files[i]);
                    if (files2.length == 0)
                    {
                        copyFile(activity, sourcePath + "/" + files[i], destPath);
                    }
                    else
                    {
                        copyDir(activity, sourcePath + "/" + files[i], destPath);
                    }
                }
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private void copyFile(final Context activity, String sourcePath, String destPath) {
        Log.v("file", sourcePath);
        InputStream in = null;
        FileOutputStream out = null;
        try {

            String filePath = destPath+"/"+sourcePath;
            File file = new File(filePath);
            if (!file.exists())
            {
                in = activity.getAssets().open(sourcePath);
                out = new FileOutputStream(file);
                int length = -1;
                byte[] buf = new byte[1024];
                while ((length = in.read(buf)) != -1) {
                    out.write(buf, 0, length);
                }
                out.flush();
                in.close();
                out.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (in != null) {
                    in.close();
                }
                if (out != null) {
                    out.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

C#这边的调用:

public void CopyFile()
{
            AndroidJavaObject androidObject = new AndroidJavaObject("com.cf.perfectsdk.api");
            AndroidJavaObject activity = new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic<AndroidJavaObject>("currentActivity");
            if (activity == null)
                return;
            androidObject.Call("copyDir", activity, "lua", Application.persistentDataPath);
}

然后是执行luac转bytes的代码:

#!/bin/bash


srcPath=$(pwd)/../Assets/Scripts/lua
destPath=$(pwd)/../Assets/StreamingAssets/lua
luaPath=$(pwd)/lua53/luac.exe

if [ -d $destPath ] 
then
        rm -rf $destPath
fi
mkdir $destPath

function genluabytes(){
    for file in ` ls $1 `
    do
        if [ -d $1"/"$file ]
        then
                        srcDir=$1"/"$file
                        descDir=${srcDir/Scripts/StreamingAssets}
                        mkdir $descDir
                        genluabytes $1"/"$file
                 else
            filename=$1"/"$file 
            if [[ ! $filename =~ \.meta$ ]];then
                                srcFile=$1"/"$file
                                destFile=${srcFile/Scripts/StreamingAssets}
                                #echo $srcFile
                                #echo $destFile
                                $luaPath -o $destFile $srcFile
            fi        
        fi
    done
}

genluabytes $srcPath

完整的C#代码:

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using XLua;
using System;
using System.IO;
using UnityEngine.UI;

namespace Tutorial
{
    public class CSCallLua : MonoBehaviour
    {
        public Text m_text;
        private AndroidJavaObject m_javaObject;

        LuaEnv luaenv = null;
        public class DClass
        {
            public int f1;
            public int f2;
        }

        [CSharpCallLua]
        public delegate int FDelegate(int a, string b, out DClass c, ref int x, ref string y);

        void Start()
        {
            m_javaObject = new AndroidJavaObject("com.cf.perfectsdk.MainActivity");
            luaenv = new LuaEnv();
            luaenv.AddLoader(SelfDefineLoader);
            luaenv.DoString("require 'hello'");
        }

        /// <summary>
        /// 自定义的路径的加载器
        /// </summary>
        /// <param name="filepath"></param>
        /// <returns></returns>
        public byte[] SelfDefineLoader(ref string filepath)
        {
            filepath = filepath.Replace('.', '/');
            filepath = Application.persistentDataPath + "/lua/" + filepath + ".lua.txt";
            Debug.Log(filepath);
            if (File.Exists(filepath))
            {
                return File.ReadAllBytes(filepath);
            }
            else
            {
                return null;
            }
        }

        void OnDestroy()
        {
            luaenv.Dispose();
        }

        public void DoFile(string lua, LuaTable env = null)
        {
            string path = Application.streamingAssetsPath + "/lua/" + lua + ".lua.txt";
            var txt = File.ReadAllText(path);
            luaenv.DoString(txt, lua, env);
        }

        public void Add()
        {
            int add = m_javaObject.Call<int>("add", 1, 2);
            m_text.text = "add=" + add;
        }

        public void SayHello()
        {
            //string str = m_javaObject.Call<string>("Unzip");
            //m_text.text = str;
            AndroidJavaObject androidObject = new AndroidJavaObject("com.cf.perfectsdk.api");
            AndroidJavaObject activity = new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic<AndroidJavaObject>("currentActivity");
            if (activity == null)
                return;
            string str = androidObject.Call<string>("Unzip", activity);
            m_text.text = str;
        }

        public void CopyFile()
        {
            AndroidJavaObject androidObject = new AndroidJavaObject("com.cf.perfectsdk.api");
            AndroidJavaObject activity = new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic<AndroidJavaObject>("currentActivity");
            if (activity == null)
                return;
            androidObject.Call("copyDir", activity, "lua", Application.persistentDataPath);
        }
    }
}
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-09-12 13:16:58  更:2021-09-12 13:17:14 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 17:03:12-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码