首页 文章 精选 留言 我的

精选列表

搜索[多语言适配],共10000篇文章
优秀的个人博客,低调大师

Asahi Linux 已开始适配苹果 M2 芯片

Asahi Linux 是一个旨在将 Linux 移植到配备 Apple Silicon 芯片 Mac 设备上的项目,项目的目标不仅仅是让 Linux 能够在这些设备上运行,而是要将它打磨到可以用作日常操作系统的程度。这样做需要大量的开发工作,尤其是还要对 GPU 架构进行逆向工程并为其开发开源驱动程序。 Asahi Linux 在今年 3 月的时候推出首个公开 Alpha 版本,可以让配备了 M1 芯片的 Mac 电脑安装运行 Linux 操作系统,虽然仅仅是 Alpha 版本,但在诸如 PHP 编程测试以及重新编译 Raspberry Pi Linux 内核的测试中还击败了苹果自己的 macOS,甚至可以快 40%,项目的发展势头也被大家一致看好。 Asahi Linux 项目的主要开发人员 Hector Martin 近日在 Twitter 上表示他们已经开始了将 Linux 移植到 M2 芯片上的工作。虽然这项工作才刚刚开始,但已经取得了不错的进展。尤其是许多现有为 M1 编写的 Linux 代码仍然可以适用于 M2,但在新的 M2 Mac 完全可以使用 Linux 之前,仍然需要编写一些新的驱动程序。 通过一系列的逆向工程/调试/内核方面的工作,Hector Martin 确认 NVMe、USB 和 SMC 功能在第一天的工作中就已经能够在 M2 上正常使用了。 不过并非所有的功能都能如此幸运,诸如 M2 设备的键盘、触控板、SPMI 都需要重写一个新的驱动程序才能正常使用,除此之外,PCIe、Thunderbolt 等功能目前也都有很多问题尚未解决。 至于对显卡、神经引擎、视频编码器等功能的支持,这是在 M1 上都暂时没有完全解决的问题,如今也同样被带到了 M2 上。 更多的细节和 Hector Martin 围绕 M2 Linux 上的活动可以通过他的 Twitter 找到: 这则推文显示,目前缺少支持的功能包括: 扬声器未经测试 键盘/触控板需要新的驱动 IPMI 需要新的驱动 PCIe 需要 m1n1 中的 fusemap 来初始化 目前 Asahi Linux 针对 M1 和 M2 芯片的 Mac 系统的移植进展可以通过 Asahi Linux Wiki 跟踪。 项目 GitHub 地址:https://github.com/AsahiLinux

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

h5 页面适配iphone6等手机

出现问题 项目中,有些需要给移动端做的h5页面。开发的时间预览使用的是浏览器自带的移动端模拟功能,各种样式,功能都是没有问题的。开发完成之后,使用自己的手机也阅览过,也是没有任何的问题。但是当交付测试的时间,在iphone6以下的机型中测试的时间出现了样式乱的问题。 思考问题 h5页面使用的是vue单模板,有一个列表在iphone6页面出现的是直接显示了标签,所以考虑到可能是js没有正确的加载和执行 解决问题 首先想到的就是兼容性的问题,iphone6手机可能对一些新的js语法没有支持性。百度也搜了一下,也有人是let在iphone中不支持,换为var就ok了。所以就考虑更换页面中的let。更换let之后,部分页面已经可以正产渲染了。 Babel 有些页面依旧没有正常的渲染。考虑到,在线的js转化工具,类似将es6转为es5的。结果发现了Babel Babel 是一个 JavaScript 编译器 Babel 是一个工具链,主要用于将 ECMAScript 2015+ 版本的代码转换为向后兼容的 JavaScript 语法,以便能够运行在当前和旧版本的浏览器或其他环境中。 了解了Babel之后,发现这正是我所需要的。 Babel在线编辑工具 解决问题 使用bable转译之后,所有机型完美渲染。

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

Android国际化:资源+初始化+系统适配

资源匹配 字符资源values、布局资源layout、图片资源drawable,都可以在文件夹后添加国家后缀,放对应语言的资源。则系统会根据设置的语言自动去找对应语言的资源,如果没有设置的系统语言资源,则会拿去拿默认资源(values、layout、drawable文件夹下)。 国家地区语言缩写代码:www.cnblogs.com/Mien/archiv… 工程内初始化设置 Application 重写onCreate()方法,初始化设置语言;为全局Context设置语言,若不设置,用全局Context加载的资源不会去加载用户设置的语言类型的资源。 重写onConfigurationChanged(Configuration newConfig)方法,再次初始化设置语言;当手机系统改变后,这个方法会回调,所以需要手动设置成用户选的语言,否则就

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

关闭读写SD卡权限后的应用适配问题

今天在做SD卡的代码优化的工作。之前公司的应用是在MainActivity中申请读写SD卡权限,如果用户选择了拒绝,那么直接弹窗提示用户必须赋予SD卡读写权限,否则将直接退出应用。虽然微信等app都是这样的逻辑,但是还是觉得很不友好。在如今这个Android手机的大环境中,SD读写权限没有那么十分严重。 因此,我们将对这里的逻辑进行改造。 1. Android中的内部存储与外部存储 Android SD卡主要有两种存储方式 Internal 、 External Storage Internal内部存储,应用私有目录 这个目录的特点是: 内部存储不需要申请任何权限 这个目录始终可用,这个文件夹用于 App 中的 WebView 缓存页面信息,SharedPreferences 和 SQLiteDatabase 持久化应用相关数据等。 当用户卸载 App 时,系统自动删除 data/data 目录下对应包名的文件夹及其内容。 对于没有root的手机是没办法看到data/data目录的,但是我们可以通过Androidstudio提供的Device File Explorer来查看。 External Storage外部存储 外部存储又分为 外部私有存储 、外部公有存储 Private files 外部存储空间中的应用私有目录 考虑内部存储空间容量有限,普通用户不能直接直观地查看目录文件等其他原因,Android 在外部存储空间中也提供有特殊目录供应用存放私有文件,文件路径为: /storage/emulated/0/Android/data/app package name 它的特点是: 默认情况下,系统并不会自动创建外部存储空间的应用私有目录。 宿主 App 可以直接读写内部存储空间中的应用私有目录;而在 4.4 版本开始,宿主 App 才可以直接读写外部存储空间中的应用私有目录,使开发人员无需在 Manifest 文件中或者动态申请外部存储空间的文件读写权限 当用户卸载 App 时,系统也会自动删除外部存储空间下的对应 App 私有目录文件夹及其内容。 自 Android 7.0 开始,系统对应用私有目录的访问权限进一步限制。其他 App 无法通过 file:// 这种形式的 Uri 直接读写该目录下的文件内容,而是通过 FileProvider 访问。 Public files 外部存储空间中的公共目录 这里说的就是我们平时所看到的存储目录了,用户可以随意在里面进行创建删除等操作。这里面保存的大多是一些与应用无关的数据,当应用被卸载,用户仍然希望保留于设备当中的信息。常见如,拍照类应用的图片文件,用户是使用浏览器手动下载的文件等。 在这里读写目录属于Dangerous Permissions危险权限了,如果工程的targetSdkVersion >=23,就要考虑权限问题了 。动态申请权限在这里就不讲了。 说完了Android中内部存储和外部存储的区别,讲一下我是如何改造的。 2. 应用改造 这里我们提示应用升级的案例来说明是如何改造的。 在应用进入的闪屏页初始化中,首先判断是否拥有SD卡,是否获取了读写SD卡权限: if (!SdCardUtils.isSdCardExist(AppStart.this)) { // 设置应用中保存的根路径 AppConstants.PARENT_FOLD_PATH = getFilesDir().getAbsolutePath(); }else { // 设置应用中保存的根路径 AppConstants.PARENT_FOLD_PATH = Environment .getExternalStorageDirectory() + File.separator + Constants.APP_NAME + File.separator; } /** * 判断当前设备上SD卡外部存储是否可用,这里只考虑6.0以上版本 */ public static boolean isSdCardExist(Context context){ if (ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { return false; } boolean isExist = false; isExist = Environment.getExternalStorageState().equals( android.os.Environment.MEDIA_MOUNTED); return isExist; } 如果我们关闭了SD卡读写权限,下载的更新包就会下载到内部存储空间 /** * 构造更新的软件的安装包的保存路径名 */ public static final String buildUpdateAPKPath() { if (!SdCardUtils.isSdCardExist(AppContext.getInstance()) && fileDir != null && fileDir.exists()) { return fileDir.toString() + "/"; } String filePath = FileUtils.buildFilePath(new String[] { SdCardUtils.getSdCardPath(), APP_NAME }); File dir = new File(filePath); if (!dir.exists()) { dir.mkdirs(); } return filePath; } 应用下载完毕,我们查看一下应用目录,发现更新包已经被下载下来了。 然后会调用打开apk文件的intent方法,核心方法如下 private static Intent getApkFileIntent(String updateFilePath) { Intent intent = new Intent(); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setAction(android.content.Intent.ACTION_VIEW); Uri uri = Uri.fromFile(new File(updateFilePath)); intent.setDataAndType(uri, "application/vnd.android.package-archive"); return intent; } 执行刚才的方法却出现了解析安装包失败的错误。 但是通过拷贝这个apk文件到外部存储目录,然后手动点击打开是没有任何问题的。那之前无法安装是因为什么呢?让我们再看一下下载的目录: 了解Linux目录权限的可以看出这里,我们对这个文件只有读写权限,没有执行权限 Linux的文件权限有以下设定: Linux下文件的权限类型一般包括读,写,执行。对应字母为 r、w、x。 Linux下权限的属组有 拥有者 、群组 、其它组 三种。每个文件都可以针对这三个属组(粒度),设置不同的rwx(读写执行)权限。 通常情况下,一个文件只能归属于一个用户和组, 如果其它的用户想有这个文件的权限,则可以将该用户加入具备权限的群组,一个用户可以同时归属于多个组。 知道了问题所在,我们就办法解决了。在打开apk之前,下载成功之后我们需要修改这个文件的权限: String[] command = {"chmod", "777", updateAPK.getFilePath() }; ProcessBuilder builder = new ProcessBuilder(command); try { builder.start(); } catch (IOException e) { e.printStackTrace(); } 重新运行打包apk,然后下载更新,更新结束后我们发现更新的apk文件的权限已经修改了。 这个时候也可以安装成功了。

资源下载

更多资源
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应用均可从中受益。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册