- 博客(31)
- 资源 (4)
- 收藏
- 关注
原创 macbook m1 JDK环境与AndResGuard编译遇到的Gradle同步报错
一.背景入手了apple macbook m1芯片版本,迫不及待的想配置开发环境进行开发调试,但是却遇到了如下Android Studio同步报错问题:二.复现步骤2.1.配置jdk首先下载jdk:https://cdn.azul.com/zulu/bin/zulu11.50.19-ca-jdk11.0.12-macosx_aarch64.dmg(这里为什么要用zulu jdk呢,因为zulu提供了m1芯片版本的openjdk,如果使用oracle jdk或者其他的openjdk,则是int
2021-09-12 21:53:29 3407 2
原创 macOS zsh git 自动补全和显示分支配置
1.自动补全git命令1.1clone git源码git clone https://github.com/git/git.git1.2 新建~/.zsh/目录mkdir ~/.zsh1.3拷贝git-completion.bash将git源码下的.git-completion.bash拷贝到~/.zsh目录下cp git-completion.bash ~/.zsh/.git-completion.bash1.4 新建~/.zshrc 文件新建~/.zshrc文件,输入如下内容z
2021-05-10 00:49:15 2764 15
原创 删除链表中重复的元素
有序链表:输入: 1->2->3->3->4->4->5输出: 1->2->5public ListNode deleteDuplicates(ListNode head) { if (head == null || head.next == null) { return head; } ...
2019-08-12 00:53:07 228
原创 线上环境定位ARouter+Tinker+多渠道打包导致java.lang.IncompatibleClassChangeError问题
由于模块化开发,项目引入了阿里ARouter路由组件,由于需要动态修复线上环境app某些异常问题,项目引入了腾讯tinker热修复组件,但是在项目上线这些组件后,出现了一个难以置信的bug,如下图所示:累计单个版本发生了上万次闪退,单个版本影响用户数千个,但是本地却没法复现,一到线上就有问题,这时就只能依赖bugly记录的线程栈来定位问题了;闪退方法栈如下:可以看到是ARouter在执行...
2019-06-27 12:38:43 707
原创 实现一个byte[]复用工具类
题目出自qq音乐Android现场笔试题,原题要求记得不太清楚,大概要求如下:public class ByteArrayCache { private int mMaxBytes; private List<byte[]> mBuffers = new ArrayList<>(64); public ByteArrayCache(int c...
2019-06-24 11:46:18 894
原创 记一次google cloud platform云服务器sshd服务挂掉如何恢复
由于云服务器默认ssh登入端口号是22,会有很多扫描器在互联网上扫描默认的22端口号,通过云主机的/var/log/secure文件可以看到:Jun 16 05:02:46 instance-1 sshd[13736]: input_userauth_request: invalid user admin [preauth]Jun 16 05:02:46 instance-1 sshd[137...
2019-06-21 23:56:30 4281 3
原创 给定一个正整数数组,返回这个数组元素拼接起来所能组成的最大数
由于最大数可能超过Integer.MAX_VALUE,返回值用String返回: //正整数数组组成最大数 static String maxNum(int [] array) { for (int i = 0;i < array.length;i ++) { for (int j = i;j < array.length;j ++) ...
2019-05-16 11:48:33 3870 1
原创 计算数组里面有多少对数之和等于指定的数,数组元素可以相等(同一个元素重复出现),配对过的index不能再次配对
用例:输入{1,1,99},100;返回1输入{1,1,99,99},返回2输入{5,8,1,9,10,99,2,3,98,98},100,返回2static int countSum(int[] items, int sum) { //key item元素,value 元素的index HashMap<Integer, Integer> has...
2019-05-16 00:01:46 2489 2
原创 快速找出一个数组中是否存在两个数字之和等于一个给定的值
给定一个数组和一个值例如int []array = {5,1,3,8,4}和10,首先算法一:public static boolean solution1(int array[],int num) { for (int i = 0;i < array.length;i ++) { for (int j = 0;j < array.lengt...
2019-05-10 03:37:53 1887
原创 两个字符串或者多个字符串中有哪些相同字符的算法
例如当前有两个字符串String s 和String t,找出这两个字符串中含有相同的字符并返回,算法一(效率最差的):/** * * @param s * @param t * @return 返回值未去重 */ static char []solution(char[] s,char[] t) { char[] c...
2019-05-09 01:49:30 3479 1
原创 腾讯mars xlog源码解析
前言 之前由于公司发展需要,app网络请求日志始终没有一个良好的分析手段,故公司成立了apm项目小组,通过AOP编程获取app网络请求日志并上报到服务端,然后通过网页多维度分析用户网络请求数据,类似听云博睿那样的工具,而日志模块通过调研最终选用了mars xlog,而xlog原有的日志格式并不符合业务需求,故需要通读xlog源码才能在其基础上进行修改,而且为什么选型xlog作为日志存储模块,接...
2019-04-11 17:06:59 2902 1
原创 编译ollvm4.0
首先下载ollvm源码 git clone -b llvm-4.0 https://github.com/obfuscator-llvm/obfuscator.git 然后命令行进入源码目录 cd obfuscator 建立build文件夹 mkdir build 进入build文件夹 cd build 配置cmake编译参数 cmake -DCMAKE_BUILD_TYPE=R...
2018-06-05 10:14:50 427
原创 Android应用内截图,解决ImageView不能截取问题
LinearLayout view = findViewById(R.id.root);ImageView mIvPreview = view.findViewById(R.id.iv);BitmapDrawable drawable = (BitmapDrawable) mIvPreview.getDrawable();Bitmap bm = drawable.getBitmap();...
2018-04-12 15:53:39 1422
原创 linux下编译opencv3.3.0 for android
环境:ubuntu 1604,ndk12b,androidsdk 首先下载源码,https://opencv.org/releases.html里面有很多版本的源码,本次使用3.3.0这个版本,所以复制图中的source超链接: 得到https://github.com/opencv/opencv/archive/3.3.0.zip源码地址,在linux的命令行窗口...
2018-04-01 11:30:55 1473
原创 android app内动态获取apk签名md5,与keytool获取的一致
首先使用keytool命令行获取: cmd中使用命令行:keytool -list -keystore D:\Desktop\app_key 根据提示输入keystore的密码,回车就可以看到签名的md5,sha1,sha256等信息 然后在app中使用次keystore编译app并打log,app代码:/** * MD5加密 * @param byteStr
2018-01-23 10:47:57 15970 5
原创 c语言(openssl)实现rsa/none/pcks1padding算法,匹配java后端
前一篇文章:http://blog.csdn.net/qq372848728/article/details/78687876int rsa_key_encrypt(EVP_PKEY *key, const unsigned char *orig_data, size_t orig_data_len, unsigned char *enc_data, size_t &enc_data_len
2017-12-01 16:26:14 1854
原创 c语言实现rsa nopadding非对称加密算法(openssl api方式),匹配java后端 bouncycastle
c语言和java语言的rsa非对称加解密算法,RSA/NONE/NoPadding方式
2017-12-01 16:15:48 7012 2
原创 jni使用openssl AES256位加解密(cbc模式),匹配java后端服务器算法,解决末尾乱码问题
前言:以下代码中统一的AES加密方式为”AES/CBC/PKCS7PADDING”,IV参数为”0102030405060708”(java中转为了byte数组,具体值看代码),之所以用CBC是因为它比ECB更安全 在使用openssl编写AES加解密算法代码时,发现c语言的AES加解密和JAVA的加解密并不能匹配,也就是说c语言加密的用c语言能解密,但是用java却解密不了,反之亦然;仔细对比发
2017-11-22 16:17:25 4201
原创 windows编译64位openssl给64位java jni调用(vs2017)
1,首先clone openssl代码,仓库:https://github.com/openssl/openssl.git 2,然后切换到分支:git checkout OpenSSL_1_0_2-stable 3,配置环境,下载并安装ActivePerl。 下载地址:http://www.activestate.com/activeperl/downloads ,我现在 的是64位的
2017-10-03 22:45:50 1334
原创 利用openssl crypto进行RSA非对称加密签名
最近公司升级app与后端通信安全机制,需要用到非对称加密RSA算法,需要在native层进行RSA签名,故采用ndk编译openssl的crypto目录下的算法,调用openssl相关函数进行签名。 首先,需要秘密保存私钥,这里在native层读到私钥后由于是在内存中,固需要用到openssl内存相关读取私钥的函数,openssl提供的bio接口读取字符串私钥,在内存中读取私钥有个坑,对私钥的内容
2017-08-05 15:29:25 1084
原创 编译ijkplayer,并添加rtsp、rtmp支持,解决无法播放、unknown、延迟问题
最近在研究利用ndk技术,实现FFmpeg解码解码视频文件、视频流,发现了B站的开源播放框架ijkplayer,真是太强大了,基于ijkplayer开发减少了许多移植FFmpeg的步骤。首先当然是配置好环境,我的环境是ubuntu_1604+ndk12e+git,按照官方的步骤,在terminal里输入回车ruby -e "$(curl -fsSL https://raw.githubuserc
2017-03-15 02:40:52 24351 10
原创 SimpleGif,一款使用方法类似Glide但更省cpu、memory的Android ndk gif解码库,cmake方式,android studio项目
Gif文件是由多张静态图片组合而成,每张图片都有自己的显示时间,屏幕通过连续显示这些图片,以达到动态图的目的,由于这些特性,导致如果用java去解码,可能效率不是那么高,因为java能运行速度始终无法匹敌c/c++,所以用jni技术,通过c/c++代码解码gif文件,再将解析得到的单张图片以及对应的显示时间返回到java层,再呈现到view上是比较好的方式。 我通过学习github上一些开源代码,
2017-03-01 14:00:16 2833
原创 JAVA死锁的写法(实际工作中要避免)
在java开发中,避免不了要加锁控制程序逻辑,但加锁有可能导致死锁,造成线程永远卡死在等待释放锁,后面的代码得不到执行; 在java里,一般是通过synchronized关键字加锁,在jdk1.5版本中新增了Lock接口显示的加锁,本文讨论用这两种方式实现死锁; 方式一:public static void main(String[] args) { Object lock1 =
2017-02-28 16:03:34 872
原创 git忽略某文件夹,但保留文件夹内的其它文件夹
需求:在构建Android Studio项目时,由于不需要把build文件夹内的文件track到仓库,但想track build文件夹内的outputs文件夹,故而需要修改.gitignore文件,在修改过程中遇到了很多坑;首先需要了解.gitignore一些通配符: 以斜杠“/”开头表示目录; 以星号“*”通配多个字符; 以问号“?”通配单个字符 以方括号“[]”包含单个字符的匹配列表;
2017-02-24 00:18:28 7937
原创 双重检验锁定单例模式的优化写法(非volatile,全版本jvm通用)
首先介绍下普通的双重检查锁定: 图中这样的代码是有问题的,因为jvm存在无序写入,在代码sInstance = new TestSingleTon() 这一处,有可能在构造函数执行前sInstance变为非null,这时的sInstance指向是一个尚未构造完成的对象,这时其他线程可能会得到一个尚未初始化完成的对象,对这个对象进行操作是会出现问题的; 针对可能出现上述无序写入问题,
2017-01-07 00:37:19 405
原创 解决Android与Java web的rsa加密算法的方法
最近想使用Android进行RSA非对称加密,但是发现加解密代码在android与pc上的运行结果不一样,后再发现是因为android的jvm与jdk的jvm实现的rsa不一样导致的,所以在创建Cipher对象时需要指定参数,android代码与标准java代码都用同样的参数:RSA/ECB/PKCS1Padding,
2016-12-06 00:38:43 709
原创 超简单上传开源项目到Github教程
1.首先肯定要有属于自己的GitHub账号啦,没有的就需要要申请,这里就不叙述申请账号的方法了,网上有随处可见 2.然后呢,需要生成ssh密钥,通过git bash cd到你的项目主目录,如果没有初始化成git的项目则需要先执行git init, 然后 执行ssh-keygen -t rsa -C “yout email”,双引号里填写你的github账户,一般都是邮箱作为账户的,执行完上面
2016-11-17 00:21:03 315
原创 Android Studio cmake方式jni开发,在c层使用其它动态链接库*.so
最近在研究Google推荐的cmake方式的ndk开发,遍寻网络居然很难找到如何在c层调用其它动态链接库函数(cmake方式),经过不懈努力,终于找到了可行的方法;本人初次涉及ndk开发,如有失误之处,请指教;
2016-11-16 01:30:46 1925
原创 AndroidStudio常用快捷键整理
1.ctrl+shift+n/ctrl+n:前一个是用来快速打开任意文件,后一个用来快速打开class文件 2.ctrl+e:列出最近修改的文件列表 3.alt+q:快速查看当前方法或者类的定义,貌似方法头不在视野内才会是查看方法的定义 4.ctrl+f12:查看当前文档结构,包括xml,java文件等 5.ctrl+alt+b:快速打开抽象方法的实现
2016-10-09 22:33:48 364
原创 单击AutoCompleteTextView后自动提示,无需输入字符,提示信息通过SQLite查询获得
单击AutoCompleteTextView后自动提示,无需输入字符,提示信息通过SQLite查询获得用到的方法 showDropDownAdded in API level 1 void showDropDown () Displays the drop down on screen.
2016-10-08 17:57:37 507
支持rtsp的ijkplayer配置文件
2017-03-15
希捷硬盘坏掉专修工具STComTools
2014-10-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人