首页 文章 精选 留言 我的

精选列表

搜索[动态模块],共10008篇文章
优秀的个人博客,低调大师

Android 动态加载 (三) PAK 详解

pak文件经常出现于游戏的安装目录中,其实pak文件是一种特殊的游戏压缩文件,用于压缩声音、图片等资料。由于pak文件专门针对游戏设计文件结构,pak文件就是将多个文件(图片、音乐、文本)打包为一个单独文件,在pak文件中保存着多个文件的数据。 pak是什么文件? 现 在大部分游戏的客户端都采用pak压缩格式,以便于游戏的开发。由于是一种压缩格式,pak文件可以用一些专业压缩软件(如WinRAR、 WinZip)打开,但由于其特殊性与一般的压缩文件格式打开方式有所不同。pak文件一般是游戏的文件,里面存了很多游戏所需的重要文件,并且是加密了 的,现在虽说有能打开pak文件的软件,但也仅限于未加密的。不过有一些专门的浏览工具可以提取其中的声音进行修改后保存为其他格式音乐。 pak文件如何打开? 那么pak文件怎么打开呢?下面小编就收集了一些支持pak文件的软件供大家使用。 特点: 1.声音,地图,3D模型,材质贴图等文件是按着保留 目录路径结构的方式压缩入PAK文件的。 2.压缩的时候可以令压缩也可以按照一定的 压缩率压缩。 使用pak这种文件格式对于游戏的开发者和玩家都有著无以伦比的方便性和可塑性(或者说自定义性)。具体如何实现的,等一下我将举例说明。使用pak包这种形式有几点好处: 1.对于程开发人员来说资源调用方便,易于管理; 2.由于结构特殊,对初学者有屏蔽作用避免被乱改,对高手却很容易修改,比较方便; 3.所有模式都是利用这个特点做的; 4.pak包被游戏的引擎视为一个目录,能利用外置pak文件的形式进行升级而无需删除原有文件。利於增加效果包,新地图,改进界面,增加model等扩展内容; 5.修改还原便利,文件之间互不影响。 如果想要打开pak结尾的文件,使用PAk浏览器 RPGViewer 3.0 下载了以后一定要看说明书(readme.txt) 可以直接查看PAK格式的内容 PAK解压: 工具里面有“解压包”的按钮,可以解压PAK 本文转自 一点点征服 博客园博客,原文链接:http://www.cnblogs.com/ldq2016/p/5253787.html ,如需转载请自行联系原作者

优秀的个人博客,低调大师

Android 7.0动态权限大总结

应公司项目需求,做了下Android 7.0适配。对于我们程序员,适配7.0主要就是对手机本地文件的Uri做转换处理。注意红色字体,意思也就是说对于http开头的等等,非手机存储中的文件就不用管了。Uri.parse(“package”) 这样的也不用管!!!!! 7.0的适配,就是对手机存储中的私有文件路径的保护,当系统发现你通过intent带走了一个uri,地址是本地的文件,就会限制的。其他的原理普及请搜索其他文章吧,此处略。 下面贴一下使用步骤和我的工具类。 一、需要修改当前module的AndroidManifest.xml文件,添加provider标签,映射路径。 <android:supportsRtl="true"> <provider android:name="android.support.v4.content.FileProvider" android:authorities="${applicationId}.myFileProvider" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/path_file"/> 文中红色部分是固定写法,官网就是这么说的,别乱试了。android:resource标签的值是main/res/xml/path_file.xml文件,即在 res下新建xml文件夹,再新建一个xml文件。 二、在res/xml下新建一个path_file.xml文件,文件名随便去,但是与上步骤一致即可。 <?xmlversion="1.0"encoding="utf-8"?> <resources> <paths> <!-- <files-path/>代表的根目录:Context.getFilesDir() <cache-path/>代表的根目录:getCacheDir() <external-path/>代表的根目录:Environment.getExternalStorageDirectory() <external-files-path/>代表的根目录:Context.getExternalFilesDir(String)Context.getExternalFilesDir(null). <external-cache-path/>代表的根目录:Context.getExternalCacheDir(). <root-path/>代表设备的根目录newFile("/"); --> <!--path=""代表根目录,也可以指定特定目录,name="camera_picture"是虚拟目录camera_picture--> <root-pathname="root"path=""/> <files-pathname="files"path=""/> <cache-pathname="cache"path=""/> <external-pathname="external"path=""/> <external-files-pathname="external_files"path=""/> <external-cache-pathname="external_cache"path=""/> </paths> </resources> 里面共有6个path标签,含义都写了,根据你的需要些对应的标签即可。比喻<external-path/>标签,里面的path=”"时,这个标签映射的就是外挂sd卡根目录了,name属性没什么用,来迷惑第三方应用的虚拟目录,来掩盖文件的真实路径。 三、工具类来了。 FileUriPermissionCompat.Java /** *@Author:duke *@DateTime:2017-06-0614:43 *@Description:android7.0uri权限适配, *(通过intent暴漏uri或file给第三方app时的)私有目录被禁止访问 *已对localpath和netpath做了适配 */ publicclassFileUriPermissionCompat{ privatestaticfinalStringTAG=FileUriPermissionCompat.class.getSimpleName(); //TODO:此处需要更改为对应值 //此处需要改成AndroidManifest.xml中申请的对应的provider的authorities值 privatestaticfinalStringAUTHORITIES="com.duke.personalkeeper.myFileProvider"; /** *是否需要适配7.0权限 * *@return */ publicstaticbooleanisNeedAdapt(){ //24以上版本 returnBuild.VERSION.SDK_INT>=Build.VERSION_CODES.N; } publicstaticUriadaptUriAndGrantPermission(Contextcontext,Intentintent,Filefile){ Uriuri=adaptUri(context,file); if(uri==null){ returnnull; } grantUriPermission(context,intent,uri); returnuri; } publicstaticUriadaptUri(Contextcontext,Filefile){ if(context==null||file==null){ returnnull; } //网络路径的特殊处理,不需要7.0适配,但必须用parse()方法 if(file.getPath().startsWith("http")){ returnUri.parse(file.getPath()); } Uriuri=null; try{ if(isNeedAdapt()){ //需要7.0特殊适配 //通过系统提供的FileProvider类创建一个content类型的Uri对象 uri=FileProvider.getUriForFile(context,AUTHORITIES,file); }else{ //不需要适配 uri=Uri.fromFile(file); } }catch(Exceptione){ Log.e(TAG,"authoritiesvalueerror,socan'tconverturi!"); e.printStackTrace(); } returnuri; } /** *对第三方应用赋予对uri读写的权限 * *@paramcontext *@paramintent *@paramsaveUri适配后的uri */ publicstaticvoidgrantUriPermission(Contextcontext,Intentintent,UrisaveUri){ if(!isNeedAdapt()){ return; } if(context==null||intent==null||saveUri==null){ return; } //网络路径的特殊处理,不需要权限 if(saveUri.getScheme()!=null&&saveUri.getScheme().startsWith("http")){ //不需要授权 return; } //1、授权(系统相册、相机、裁剪时需要)--这种写法待分析 ListresInfoList=context.getPackageManager().queryIntentActivities(intent,PackageManager.MATCH_DEFAULT_ONLY); for(ResolveInforesolveInfo:resInfoList){ StringpackageName=resolveInfo.activityInfo.packageName; if(TextUtils.isEmpty(packageName)){ continue; } context.grantUriPermission(packageName,saveUri,Intent.FLAG_GRANT_READ_URI_PERMISSION|Intent.FLAG_GRANT_WRITE_URI_PERMISSION); } //2、授权(安装apk时需要) intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION|Intent.FLAG_GRANT_WRITE_URI_PERMISSION); } publicstaticvoidrevokeUriPermission(Contextcontext,Intentintent,UrisaveUri){ if(!isNeedAdapt()){ return; } if(context==null||intent==null||saveUri==null){ return; } //网络路径的特殊处理,不需要权限 if(saveUri.getScheme()!=null&&saveUri.getScheme().startsWith("http")){ //不需要授权 return; } try{ context.revokeUriPermission(saveUri,Intent.FLAG_GRANT_READ_URI_PERMISSION|Intent.FLAG_GRANT_WRITE_URI_PERMISSION); }catch(Exceptione){ e.printStackTrace(); } } } 核心代码: uri=FileProvider.getUriForFile(context,AUTHORITIES,file); file就是你想要暴露给其他应用的文件地址,比喻你要拍照,把结果保存到file文件中。 AUTHORITIES就是上面第一步中,android:authorities=”${applicationId}.myFileProvider”的实际值, ${applicationId}取得是app/build.gradle中defaultConfig标签的applicationid值。通过系统提供的FileProvider类的静态方法转换file地址为一个以content://开头的特殊的uri。如果不转换的话,直接用Uri.fromFile(file),你得到的是一个file:///xxxxx这样的uri。就这差别。 转换了uri之后,还需要授权: /** *对第三方应用赋予对uri读写的权限 * *@paramcontext *@paramintent *@paramsaveUri适配后的uri */ publicstaticvoidgrantUriPermission(Contextcontext,Intentintent,UrisaveUri){ if(!isNeedAdapt()){ return; } if(context==null||intent==null||saveUri==null){ return; } //网络路径的特殊处理,不需要权限 if(saveUri.getScheme()!=null&&saveUri.getScheme().startsWith("http")){ //不需要授权 return; } //1、授权(系统相册、相机、裁剪时需要)--这种写法待分析 List<ResolveInfo>resInfoList=context.getPackageManager().queryIntentActivities(intent,PackageManager.MATCH_DEFAULT_ONLY); for(ResolveInforesolveInfo:resInfoList){ StringpackageName=resolveInfo.activityInfo.packageName; if(TextUtils.isEmpty(packageName)){ continue; } context.grantUriPermission(packageName,saveUri,Intent.FLAG_GRANT_READ_URI_PERMISSION|Intent.FLAG_GRANT_WRITE_URI_PERMISSION); } //2、授权(安装apk时需要) intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION|Intent.FLAG_GRANT_WRITE_URI_PERMISSION); } 里面有两部分授权方式,经过多轮测试,发现需要同时使用比较好。 第一种方式,for循环,是因为有时候你并不确定需要分享的应用的包名是哪一个,所以找到所有有可能的第三方应用,全部授权了。 后来测试发现,安装apk的时候,只有上面的授权是不行的,还得加上intent.addFlag的方式再次授权才行。 最后,需要注意的是: 1、注意7.0的版本判断。 2、切记,7.0的权限有可能需要对sd卡读写,需要6.0的读写sd卡权限。当你测试7.0权限不成功时,考虑下6.0的权限是否到位了。 其他的没的说了。就这些。 本文作者:佚名 来源:51CTO

优秀的个人博客,低调大师

云办公系统 skyeye v3.4.3 发布,组织结构,任务计划模块,薪资模块更新

云办公系统 skyeye v3.4.3发布。 erp:https://gitee.com/doc_wei01/erp-pro OA:https://gitee.com/doc_wei01/skyeye 项目开发计划:https://docs.qq.com/doc/DQlRxcVRMWWVjbU1i?_from=1&disableReturnList=1,有问题可以联系作者,详情请看开发计划。 更新内容: 新增我的任务计划查询功能 新增全部任务计划查询功能 新增我创建的任务计划查询功能 新增我下属的任务计划查询功能 新增企业组织结构图查看 新增薪资模板设置 效果图: 效果图 效果图

优秀的个人博客,低调大师

云办公系统 skyeye v3.2.6 发布,更新学校模块以及考试模块

云办公系统skyeye v3.2.6发布。 开源版地址:https://gitee.com/doc_wei01/skyeye 项目开发计划:https://docs.qq.com/doc/DQlRxcVRMWWVjbU1i?_from=1&disableReturnList=1,有问题可以联系作者 更新内容: 问卷设计代码重构 试卷设计代码重构 上传插件升级,解决非图片无法设置默认值的问题 题库单选题,多选题,填空题等多种题型新增标准答案功能、试题附件(视频,音频,图片)功能、是否允许学生上传图片附件功能 效果图: 效果图 效果图

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册