需求是,使用native方式,读取apk包里的lua代码,读进c#,做解密

一准备unity工程

public class GameMain : MonoBehaviour {
public const string libName = "TGNative";
public Text content;
[DllImport(libName)]
public static extern int ReadAsset(string fileName, byte[] buffer, int size);
// Use this for initialization
void Start () {
Debug.Log("Start################");
var size = * ;
var buffer = new byte[size];
var num = ReadAsset("test.txt", buffer, size);
Debug.Log("ReadAsset ################"+ num);
if (num > )
{
Debug.Log("Read succ");
var str = UTF8Encoding.UTF8.GetString(buffer,, num);
content.text = str;
Debug.Log(str);
}
} // Update is called once per frame
void Update () { }
}

二unity导出android工程

注意playersetting 里设置包名

三android studio 打开导出的工程

四 添加代码

UnityPlayerActivity里

新增TGNative.java,增加native方法

public native static void InitAssetManager( AssetManager am );

五使用javah生成头文件

javah -d jni -classpath D:\work\ndkread\AssetMgr\AndroidAssetMgr\NativeAssetMgr\build\intermediates\classes\debug;C:\Users\Topjoy\AppData\Local\Android\Sdk\platforms\android-\android.jar com.topjoy.JniTest.TGNative

六新增NativeUtil.c和Android.mk Applicatioin,mk ,build.bat

build.bat

ndk-build NDK_PROJECT_PATH=. NDK_APPLICATION_MK=Application.mk APP_BUILD_SCRIPT=Android.mk APP_PLATFORM=android-

NativeUtil.c

//
// Created by Topjoy on 2018/12/7.
//
#include <jni.h>
#include <assert.h>
#include <string.h>
#include <malloc.h>
#include <android/asset_manager.h>
#include <android/asset_manager_jni.h>
#include <android/log.h>
#include "com_topjoy_JniTest_TGNative.h" #define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG,"Unity",__VA_ARGS__) // 定义LOGD类型
#define LOGW(...) __android_log_print(ANDROID_LOG_WARN,"Unity",__VA_ARGS__) static AAssetManager* mgr = NULL;
JNIEXPORT void JNICALL Java_com_topjoy_JniTest_TGNative_InitAssetManager
(JNIEnv * env, jclass tis, jobject assetmanager){
mgr = AAssetManager_fromJava(env, assetmanager);
} extern int ReadAsset(char* fileName, char* buffer, int size)
{
if(mgr == NULL)
{
LOGW( "mgr is null" );
return ;
}
AAsset* asset = AAssetManager_open(mgr, fileName, AASSET_MODE_UNKNOWN);
if( asset == NULL )
{
LOGW( "open asset (%s) failed" , fileName);
return ;
}
int len = (int)AAsset_getLength(asset);
if(len >size)
{
LOGW("Buffer less than length");
return ;
}
int nread = AAsset_read(asset, buffer, size);
AAsset_close(asset);
if(nread != len)
{
LOGW("Read num %d not equal length %d", nread, len);
return ;
}
return nread;
}

七运行build.bat 生成so文件

八使用jar命令生成jar文件

@echo off
set app=%cd%
set debugp=%cd%\build\intermediates\classes\debug
set classp=%debugp%\com\topjoy\JniTest
cd %classp% pause
for %%x in (*) do (
if not "%%x"=="UnityPlayerActivity.class" (
if not "%%x"=="TGNative.class" (
del %%x
)
)
) cd %debugp%
jar -cvf class.jar com move class.jar %app%\

九把生成的class.jar 和so文件拷贝进unity工程

十生成apk,拷贝进木木测试

成功!

Unity使用native读取streamingasset里文件的更多相关文章

  1. unity Android在streamingAssets路径下文件无法读取的的解决方法

    unity Android在streamingAssets路径下文件,有时候plugin下的.jar或者.so无法直接读取: 解决方法之一,拷贝至其他路径: #if UNITY_ANDROID str ...

  2. JAVA读取本地html文件里的html文本

    /** * 读取本地html文件里的html代码 * @param file File file=new File("文件的绝对路径") * @return */ public s ...

  3. Unity Assets目录下的特殊文件夹名称

    1.隐藏文件夹以.开头的文件夹会被Unity忽略.在这种文件夹中的资源不会被导入,脚本不会被编译.也不会出现在Project视图中.2.Standard Assets在这个文件夹中的脚本最先被编译.这 ...

  4. 【Unity基础知识之三】Unity Assets目录下的特殊文件夹名称

    Unity3D的特殊目录名称   Unity预留了一些目录名称,这些目录有着特殊的含义.比较重要的有: Resources这个目录下的所有文件都会被打包到发布版本中,程序可以通过文件路径来访问它们.这 ...

  5. JNI读取assets资源文件

    源自:http://www.rosoo.net/a/201112/15459.html assets目录底下的文件会被打包到一个apk文件里,这些资源在安装时他们并没被解压,使用时是直接从apk中读取 ...

  6. (转)Unity Assets目录下的特殊文件夹名称(作用和是否会被打包到build中)

    原文:http://wiki.unity3d.com/index.php/Special_Folder_Names_in_your_Assets_Folder 1.隐藏文件夹以.开头的文件夹会被Uni ...

  7. 在Unity中使用LitJson解析json文件

    LitJson 这个库需要找资源,找到LitJson.dll后将它放在Assets文件夹下,在脚本中使用using引入即可 测试代码 json文件: {"Archice":[{&q ...

  8. 如何读取Access里的OLE类型的图片

    身份证一类读卡器读取的照片信息,保存在Access数据库中一般为OLE型字段,图片为BMP格式,因为是用其读卡器写入的,其数据类型为常二进制数据. 再用报表或EXCEL读取这些图片时,如果将该图片字段 ...

  9. 不可或缺 Windows Native (10) - C 语言: 文件

    [源码下载] 不可或缺 Windows Native (10) - C 语言: 文件 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 文件 示例cFile.h #ifn ...

随机推荐

  1. 窥探try ... catch与__try ... __except的区别

    VC中的这两个东西肯定谁都用过, 不过它们之间有什么区别, 正好有时间研究了一下, 如果有错误欢迎拍砖.基于VC2005, 32位XP 平台测试通过. 估计对于其他版本的VC和操作系统是不通用的. 1 ...

  2. SqlServer+Topshelf+Quartznet做集群,定时任务分布式处理

    接触Quartznet之前,老东家用的是总监自己写的分布式任务框架,好用但是配置麻烦,unity,一个微软容器,配置节点错一个,整个使用到unity文件的项目全部跑不起来,这后果真的受不了... 目前 ...

  3. GBDT,随机森林

    author:yangjing ## time:2018-10-22 Gradient boosting decision tree 1.main diea The main idea behind ...

  4. CSDN开源夏令营 百度数据可视化实践 ECharts(4)

    ECharts知识点总结: 在应用过程中总会遇到一些难以理解的概念和属性,这里就总结了一下比較难的知识点,方便理解概念.进而更好的掌握ECharts. (1)1.  一个完整的option包括什么?能 ...

  5. Atitit..net clr il指令集 以及指令分类  与指令详细说明

    Atitit..net clr il指令集 以及指令分类  与指令详细说明 1.1. .NET CLR 和 Java VM 都是堆叠式虚拟机器(Stack-Based VM), 1 1.2. 查看工具 ...

  6. Atitit.手机验证码的破解---伪随机数

    Atitit.手机验证码的破解---伪随机数 1. 手机验证码几乎都是伪随机数1 2. 伪随机数1 2.1. 生成方法编辑1 2.2. 随机数的计算方法在不同的计算机中是不同的,即使在相同的计算机中安 ...

  7. Atitit.js跨域解决方案attilax大总结 后台java php c#.net的CORS支持

    Atitit.js跨域解决方案attilax大总结 后台java php c#.net的CORS支持 1. 设置 document.domain为一致  推荐1 2. Apache 反向代理 推荐1 ...

  8. 过滤NSString中的Emoji

    有时候由于项目需求.要过滤NSString中的emoji. 比方下面情况: 要跟android互通,android假设还没做这方面的支持. 内容做为手机短信发出去. 思路例如以下,遍历NSString ...

  9. RGB格式等比例缩放

    原理为:将原始图像的每个像素通过一个比例关系式映射到相应的位置. /* lrgb: input 24bits rgb buffer srgb: output 24bits rgb buffer wid ...

  10. 【转载】IE下利用滤镜实现背景颜色渐变

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...