gitlab 一键上传脚本

最近公司的项目将代码仓库迁移到了gitlab中,为了代码安全,gitlab中的开发分支被设置成了受保护的分支,每次提交都要走下面的流程:

本地开发分支 -> 新建临时分支 -> 将临时分支上传仓库 -> 创建合并请求 -> 删除本地临时分支 -> 切换会开发分支

每次都是如此麻烦的流程,因此便萌生了使用shell脚本完成这些机械的过程。

阅读更多

android uri 生命周期问题

最近在写我的个人应用KeepassA时,遇到了android文件uri生命周期的问题,被文件真实路径的获取搞得有点懵逼。从android p开始,谷歌对文件访问的权限限制的更加变态了,如果想兼容大多数机型,使用谷歌提供的ASF框架是一个很好的选择。

但是该框架只能返回文件的uri,并不能返回文件路径,并且随着android的进一步升级,特别是从android Q 开始,已经完全无法从uri获取到文件真实路径了!!

阅读更多

沙箱机制下的应用间数据共享

通过android的沙箱机制,可以在不同的应用间共享代码、数据、或资源文件。
阅读本文前需要了解android的沙箱机制

一、代码共享


Context packageContext = createPackageContext("com.example.signatureapp", Context.CONTEXT_INCLUDE_CODE|Context.CONTEXT_IGNORE_SECURITY);

Context.CONTEXT_INCLUDE_CODE:

把参数包名对应的应用中的代码包含到Context中,这样当前应用才能访问context应用中的类,如果context对应的应用不能安全的加载到当前应用中,会报出SecurityException,如果想要加载另一个应用,访问它的数据,则这个标记必须设置

CONTEXT_IGNORE_SECURITY:忽略加载context对应的应用这个过程中的安全限制,总是允许加载,和CONTEXT_INCLUDE_CODE配合使用,代表不管是否安全,都要加载,一般使用要小心。

阅读更多

android 沙盒模型

一、Android延用的linux权限模型

1.1 android沙箱

Android 系统中,应用是在Dalvik 虚拟机实例三运行的,而每一个虚拟机都是一个独立都进程,而在linux中,每一个进程都是相互隔离的,Android 这种基于 Linux 的进程 “沙箱” 机制,是整个安全设计的基础之一。

因为Android是继承于linux,因此继承了linux用户管理的特点,并根据移动端的特点进行了优化。

Android 沙箱的核心机制基于以下几个概念:

1、标准的 Linux 进程隔离;

2、大多数进程拥有唯一的用户 ID(UID);

3、以及严格限制文件系统权限。

阅读更多

在mac上使用wine运行win版本的为知笔记

用了快半年mac版本的为知笔记,快被这残废逼疯了,没有最近历史,没有tab,甚至连笔记都只能单开,没有插件系统,还时不时崩溃,要多垃圾就有多垃圾,真心无力吐槽,这残废的为知笔记让我从为知的脑残粉变成了黑粉。直到最近我遇到了wine!!!!
wine是一款非常强大的,能在mac、linux平台直接运行windows平台的软件,只需要简单的几个步骤,就可以用上win版本的为知笔记了,现在终于可以放弃mac上这残废的为知了!!!!

阅读更多

java 内部类、文件类

最近写代码时,遇到了一些类使用错误的问题,重新研究了下java的各种类,发现细节还是很多的。
在java中主要有两种类类型:文件类、内部类。

阅读更多

Clang编译FFmpeg常见问题

最近闲来无事,就开始研究下和ffmpeg相关都知识,看了网上关于ndk编译ffmpeg的教程,基本上都是使用gcc来编译,而ndk从r18b开始就正式移除gcc来,因此很有必要研究下clang编译ffmpeg,在此过程中遇到了不少奇怪的问题。

系统:macos
ffmpeg版本:4.1.3
ndk版本:r19c
编译器:clang

阅读更多

android jni 动态注册

最近在研究ffmpeg这个视频库,需要使用到jni的接口,官网看了一遍jni函数注册的方法,感觉特别繁琐,每当新增一个native方法时都要手动编写一个对应的cpp函数,并且cpp函数还要有命名约束,实在不方便。
并且静态注册还有以下弊端:

  • 后期类名、文件名改动,头文件所有函数将失效,需要手动改,超级麻烦易出错
  • 代码编写不方便,由于 JNI 层函数的名字必须遵循特定的格式,且名字特别长;
  • 会导致程序员的工作量很大,因为必须为所有声明了 native 函数的 java 类编写 JNI 头文件;
  • 程序运行效率低,因为初次调用 native 函数时需要根据根据函数名在 JNI 层中搜索对应的本地函数,然后建立对应关系,这个过程比较耗时。

阅读更多