Android
jacksinrow
Learn more and write less bug!
展开
-
Jenkins 自动化构建 Android 项目
Tips :Jenkins 已经安装并配置好了,版本号:2.258创建项目:New Item —— Enter an item name —— Freestyle projectGeneral 一般配置选择资源路径git 仓库(我这里是 gitlab 仓库)添加账号、密码、触发的分支名称(*/ 不用去掉)Build Triggers 自动化部署生成 Secret token 配置到 gitlab 仓库上选择 Poll SCM 轮询定时器,如果没有写明规则,则.原创 2020-09-25 14:35:46 · 705 阅读 · 0 评论 -
Mac 上搭建 Linux 环境
在 Mac 上如何搭建 Linux 环境,我选择了使用 VMware Fusion + ubuntu 方式,原因在于我找不到 VMware workstation Mac 版本,在官网上看到只有 windows 和 Linux,最后之所以选择使用 ubuntu 也是因为我旁边有一群正在使用该软件开发的程序猿。准备资料大家可以直接使用该链接,获取相关的软件和工具,我使用的破解密钥也放在上面了。链接:https://pan.baidu.com/s/1t0BScP1HOJhKqlN3B5JDSw 密码:4原创 2020-05-12 10:18:24 · 3277 阅读 · 0 评论 -
Android 加密 AES
AES 加密又称对称性加密,在开发中常用于对流数据对加密,尤其是流数据在网络传输过程中,担心被泄露,AES 加密被常用于这块的校验中。下面是 AES 加密的百度百科说明解释:AES加密标准又称为高级加密标准 Rijndael 加密法,是美国国家标准技术研究所NIST旨在取代 DES 的 21 世纪的加密标准。AES 的基本要求是,采用对称分组密码体制,密钥长度可以为 128、192 或 256...原创 2020-05-05 15:54:14 · 822 阅读 · 1 评论 -
Android 通过 USB 调用 UVC 摄像头初体验
通过 USB 调用 UVC 摄像头,详细市面上都有非常多的博客介绍,在这里我就不去做过多的描述和介绍了。基本上都是使用 Github 上的开源库-https://github.com/saki4510t/UVCCamera。这个是目前为止较为全面的解释和说法,这是一个日本人写的,里面有很多日文注释,如果阅读费解的小伙伴,可以看看这篇博客Android中多USB摄像头解决方案——UVCCame...原创 2020-04-26 10:41:10 · 2674 阅读 · 0 评论 -
如何快速启动应用?
其实方法有很多中,在这里我介绍一种无意间看到的。有时候有很多需求,客户给你一个 apk,再往上下载一个 apk ,如何去启动它呢。在这里很多人就会说了,直接安装,点击应用图标啊,废话。如果可以这样操作的话,那还说个锤子。在现实的工作中,会遇到各种各样的奇葩场景,很多时候不会把所有的东西都给你准备好,如果真这样,那真没啥事了。废话不多说,直接介绍:1.首先我们把 apk 安装到手机上,打开应用,查...原创 2020-04-18 17:11:18 · 609 阅读 · 0 评论 -
如何替换 Android 系统 Launcher 壁纸
上次研究 adb 命令如何删除开机动画后,再研究了一下,壁纸其实我们也是可以替换。接下来直接上命令,各位看客可以尝试一下。adb remountadb shellcd system/mediarm wallpaper.png (删除了)eixt(退出 shell)adb push /Users/xx/Downloads/wallpaper.png syst...原创 2020-04-18 16:59:24 · 1466 阅读 · 0 评论 -
如何删除 Android 系统开机动画
声明:本方法只适用于部分 Android 系统,有一些经过系统定制的,是内嵌到系统内部的,通过 system 文件无法做处理确保系统是处于 root 权限查看 system 文件夹下能否找到 bootanimation.zip (一般存放在 media 下),使用 adb 命令直接删掉看看是否有效果体命令如下adb rootadb remountcd system/media(根...原创 2020-04-18 16:46:57 · 2259 阅读 · 0 评论 -
Android RSA 加密
RSA 介绍RSA 算法是一种非对称密码算法,所谓非对称,就是指该算法需要一对密钥(公钥和私钥),使用其中一个加密,则需要用另一个才能解密。 实现1.生成密钥对 /** * 随机生成RSA密钥对 * * @param keyLength 密钥长度,范围:512~2048 * 一般1024 * @re...原创 2020-04-04 15:10:28 · 451 阅读 · 0 评论 -
Mac 配置 SSH 后仍需要输入密码
初玩 Mac 电脑时,配置过 SSH 成功后就没有管了,但后来需要再次配置到另外的账号下,结果就出现问题了,老是不成功,按道理只是获取本地的 ssh key 就可以了,经过多次误操作后,决定重新配置。1.配置账户git config --global user.name “account name” ->用户名,建议拼音或英文git config --global user.e...原创 2020-03-28 14:28:34 · 1642 阅读 · 0 评论 -
Android fat-aar 打包前后问题
最近在打包 aar 时,总是遇到问题。尤其是在多依赖库时,副 module 的引用库一直找不到资源,这是因为正常的依赖关系是可以构建的,但如果打包成 aar 的话是不会把相关 module 里依赖的第三方 aar/ jar 管理起来,这需要另外一种方式进行 aar 构建。相信大家都应该知道 android-fat-aar 这个脚本库,但是这个库早在 17 年的时候就不维护了。并且有很多地方需要关...原创 2020-03-22 21:53:51 · 2267 阅读 · 0 评论 -
给大家推荐的几个学习 Android 知识的链接
非常丰富的自定义 View 教学网站:https://hencoder.com/这几年口碑不错的学习平台:菜鸟窝:https://www.cniao5.com/慕课网:https://www.imooc.com/ADB 命令大全:https://www.jianshu.com/p/9b57c68d2bd2性能优化写的很好的博客链接:https://zhuanlan.zhihu...原创 2020-02-09 22:03:59 · 196 阅读 · 0 评论 -
Kotlin:关于关联module时,无法找到库中jar的方法
Kotlin 作为 Android 官方第一语言,这是作为 Android 开发人员来说,要去了解并且熟悉的一件重要事情。 最近在使用 Koltin 封装库的时候出现了:无法找到 jar 包中的方法。并且还只是一些方法,剩下的都可以调用,这就奇怪了。大概是这样的,我在 module 中封装一个方法,实现回调jar中的监听,但是我用的是this,就会报找不到该方法的错误:...原创 2018-06-27 20:53:34 · 1701 阅读 · 0 评论 -
Android 蓝牙基础篇之 —— A2DP
本篇文章主要介绍 A2DP 基础操作。介绍A2DP :Advanced Audio Distribution Profile。高质量音频数据传输的协议,其定义里了传送单声道或立体声等高质量音频(区别于蓝牙SCO链路上传输的普通语音)信息的协议和过程。A2DP的典型应用是将音乐播放器的音频数据发送到耳机或音箱。A2DP 定义了两种角色:Audio Source :(音频源) 音频的输入...原创 2019-01-15 15:57:57 · 4384 阅读 · 1 评论 -
进程间通讯之 —— AIDL
最近做的项目中有需要到进程间通讯,之后通过比对之后选择了 AIDL 作为进程之间的通讯协议。下面简单记录一下关于 AIDL 这方面的一些开发调研与经验。官方文档: https://developer.android.com/guide/components/aidl#Calling调研的技术点:支持多种数据类型。如:int,String,基本数据类型,实现 Parcelabel 对象等...原创 2019-01-28 18:30:53 · 194 阅读 · 0 评论 -
关于 Google play 上架的缺失 64 位版本问题
相信大家都收到来自 Google 官方的警告信。自 2019 年 8 月 1 号起,Google play 上架需要提供关于64 位版本。那么以前上架的项目没有考虑 64 位 CPU 该怎么办呢?如果是年代久远的项目可以把 32 位的 so 文件复制一份放到 64 位目录下,但这种不严谨,尽量能找到相对应的so 文件还是要提供的。如果是最近的项目,那么编译相对的 64 位文件或者让相关的提...原创 2019-07-12 18:06:54 · 6701 阅读 · 0 评论 -
Gradle 升级到 3.0.0 之后 implementation 与 compile 之间的区别
在 Android studio 升级到 3.0 版本之后,dependencies 中 implementation 替代 compile。那么新版的 Gradle 中 implementation 和 compile 有什么区别呢?当项目依赖关系是 app > module 时,在 module 的 build.gradle 下:1.如果使用 implementation ...原创 2019-07-10 23:59:53 · 840 阅读 · 0 评论 -
如何在 GitLab 上创建代码仓库
最近在做公司项目代码仓库迁移事情,经领导考虑再三最终还是选择了 Gitlab, 相关的原因大家可以看看这篇文章→ 走你那么接下来介绍一下如何在 GitLab 上创建仓库以及一些注意点:一.常规流程 → 登录、注册 (这里可能因为网络需要用一下梯子,不然有可能会卡在接收验证码上)二.创建 GitLab 团队新建工程1.创建项目相关工程2...原创 2019-07-20 11:26:58 · 16422 阅读 · 1 评论 -
在 .gitignore 的一些坑
在对接其他公司开发的项目时,由于交付给我们的是打包 zip 形式发送源码,一些因素的原因,没有经过太多的验证就上传到我司的代码仓库了。我司另外的 Android 开发人员在 clone 代码之后,结果运行闪退了。查看 log 日志,并没有发现较为显眼的错误。在代码中增加异常捕获也没有抓到相关的 log 。苦恼了一段时间后,我也很好奇,通过查看 error 层级的 log ,最终发现这一段 log...原创 2019-07-26 18:32:46 · 711 阅读 · 0 评论 -
Android 命名规范
Android 命名规范前言为了增加代码的可阅读性和可维护性,让开发或维护的小伙伴可以赏心悦目的进行代码阅读,因此制定项目代码规范文档。一.类名大写字母开头,按照大驼峰命名方式 UpperCamelCase, 尽量避免缩写。除非该缩写是众所周知的,比如 HTML、URL,如果类名称中包含单词缩写,则单词缩写的每个字母均应大写。根据不同的功能类型附带的后缀比如:MainActi...原创 2019-09-01 22:02:40 · 125 阅读 · 0 评论 -
Android 蓝牙基础篇之 —— HFP
HFP 简单介绍定义:HFP (Hands-free Profile),让蓝牙设备(如蓝牙耳机)可以控制电话,如接听、挂断、拒接、语音拨号等,拒接、语音拨号要看蓝牙设备是否支持。HFP定义了音频网关(AG)和免提组件(HF)两个角色: 音频网关(AG) –该设备为音频(特别是手机)的输入/输出网关。 免提组件(HF) –该设备作为音频网关的远程音频输入/输出机制,并可提供若干遥控功能。...原创 2019-01-15 14:56:48 · 4593 阅读 · 2 评论 -
Android 蓝牙基础篇之 —— SPP
蓝牙通讯协议有两种: GATT和 SPP之前已经介绍了 BLE 是如何进行简单的通讯,现在介绍 SPP 具体的方法。连接 // 取消所有正在连接/已经连接的线程,然后重新建立连接 public synchronized void connect(BluetoothDevice device) { if (D) Log.d(TAG, "conne...原创 2019-01-17 18:15:47 · 7072 阅读 · 0 评论 -
关于 Android 混淆处理
第一步:在 build.gradle 的 buildTypes 打开 ,最好的话加上 zipAlignEnabled 为 true因为像 Google Play 强制要求开发者上传的应用必须是经过 zipAlign 的,zipAlign 可以让安装包中的资源按 4 字节对齐,这样可以减少应用在运行时的内存消耗。第二步:在工程下找到 “proguard-rules.pro” 文件,在里面...原创 2018-08-22 10:49:07 · 352 阅读 · 0 评论 -
Android 右滑动退出当前页面
Android 向右滑动退出当前页面 滑动退出当前页面这个功能,市面上很多App都有这样的体验。如QQ,在好友动态页面上:向右滑动返回。向左滑动拍照发表说说。当时觉得挺有意思的。需求能上也刚好有这个小功,故而翻阅了下资料,发现还是蛮简单的。 滑动、滑动很容易让我们想到 Activity 的一个方法 onTouchEvent 它是用来处理触摸事件的。所以我们可以用这个...原创 2018-06-21 15:12:58 · 2359 阅读 · 0 评论 -
关于如何多应用、多渠道打包问题
多应用多渠道打包问题 最近有个需求要求使用一套代码逻辑然后通过包名的区分进而形成多个app,当时想到了productflavors。但是又有需求需要集成友盟统计,这就有点难搞了。经过翻找资料之后发现,gradle是真的强大。我们可以通过构建变体(buildvariant)来实现这个需求。 1、buildTypes 在编译的时候,buildTypes 默认构建debug和re...原创 2018-06-01 16:32:47 · 368 阅读 · 0 评论 -
关于Android 国际化遇到的一些坑
在开发过程中,难免会进行语言适配,就是国际化。其实国际化也是蛮简单的,网上都可以很多种适配的方法。大多数:## 1、在res资源目录下新建values资源文件 ##比如:values-zh-rTW,values-en-rUS ,下面是各国的命名规范: Chinese, PRC (zh_CN)----------------------------------中文简体,中国 Chin...原创 2018-06-12 16:21:26 · 3349 阅读 · 0 评论 -
关于Android Studio NDK的出现的问题
一:在编译别人的代码时,出现 ABIs [armeabi] are not supported for platform 查找了一番发现,原来工程用了 NDK,而我的 Android Studio 的 NDK 版本是 r17b(v17)的,经过查阅发现: ndk(v17)已不在支持mips、armeabi等CPU架构,只支持armeabi-v7a, arm64-v8a, x...原创 2018-07-11 20:52:28 · 2225 阅读 · 0 评论 -
关于App市场上架的问题集锦
现在App上架越来越难了,各大平台开始控制上架的审核标准。写这篇博客是用来记录下,上架没成功的问题以及解决的方法。一、小米市场错误日志 16:52:28.044 16821 17760 I am_crash: [27420,0,------包名----------,15253060,java.lang.OutOfMemoryError,Failed to allocate a 136...原创 2018-07-26 16:51:29 · 1075 阅读 · 0 评论 -
关于 google 推出的 blockly
最近在研究 Blockly 这块的东西,这块的东西在2016年的时候回推出来了。但是当时估计还不是很完善。现在 Google 把它变得更加完善了。 这是 Google 针对儿童编程专门开发的一套用于构建可视化编程编辑器的库。目前现有Web、iOS、Android版本,可快速集成开发。 主要的核心思想是让儿童在 App 中进行拖动连线等简单操作,再通过蓝...原创 2018-08-02 10:09:20 · 887 阅读 · 0 评论 -
Android:如何实全屏现拖动View
最近在做自定义View,有一个需求是需要自定义一个View实现全屏拖动。刚好研究了下,发现还是蛮简单的,在这里总结下大概的思路,直接上代码:1、编写一个 main.xml 布局文件<?xml version="1.0" encoding="utf-8"?><FrameLayout xmlns:android="http://schemas.android.com/ap...转载 2018-08-30 19:18:33 · 739 阅读 · 0 评论 -
处理 Google Play 市场上架,引出的一系列旧项目问题
由于公司的 Google Play 账号有变动,导致已经上架的 APP 需要重新上架,然后一顿忙碌,在上架的时候,突然发现 Goole Play 市场对 APK 版本做了限制。又不得不对旧项目进行版本升级兼容。 首先面临的是权限问题以及各种各样版本升级之后的适配问题,很幸运发现问题点不是很多。把动态权限做好之后,还顺带处理了一个 Android 7.0 之后调用摄像头不成功,导致崩溃的...原创 2018-09-13 19:25:42 · 1126 阅读 · 0 评论 -
Android 蓝牙 4.0 ble 基础通讯篇
这篇博客主要讲解 Android 蓝牙 BLE 基础通讯。一、添加权限<uses-permission android:name="android.permission.BLUETOOTH"/><uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>不过在 Android 6....原创 2018-09-20 21:34:36 · 948 阅读 · 0 评论 -
Android:自定义圆角图片
自定义圆角图片:代码如下 public class RoundImageView extends android.support.v7.widget.AppCompatImageView{ public RoundImageView(Context context) { super(context); } public RoundImageView(Context con...原创 2018-12-19 21:25:28 · 638 阅读 · 0 评论 -
Bugly 异常捕获的简单集成
公司一直没有引入这个强大的 crash 异常捕获工具,而是采用了传统的自行捕获异常上报到服务器或者保存到本地,同时在使用友盟统计时,由于友盟也有异常捕获,但是在最近出现了一个比较严重的问题,就是友盟后台一直没有捕获到异常,数据显示正常,但是客户一直反馈说,在某些场景上操作,应用就会 crash 。由于没有及时捕获导致客户在反馈的时候,我们没能及时定位问题以及解决。在解决之后,通过讨论一致决定,采用...原创 2018-12-05 16:34:36 · 579 阅读 · 0 评论 -
Bugly 热更新简单介绍
Bugly 热更新介绍Bugly 采用 微信Tinker 的开源方案,并集成了自动下载补丁包、合成、并应用补丁的功能,同时提供了管理后台。检查下载补丁包在启动应用时,并在下次启动应用时生效补丁包。集成 Bugly SDK 请参照官方文档:https://bugly.qq.com/docs/user-guide/instruction-manual-android-hotfix/?v=20181...原创 2018-11-30 17:02:06 · 167 阅读 · 0 评论 -
Android 音频焦点 AudioFocus 介绍和使用
项目中加入某厂的语音识别技术之后,发现对音频焦点处理这块有点不尽人意。因为本身库里面封装了这一层,导致在外面重写的时候获取一直是 focusChange = -1 。所以在外面就没有办法操作了,最后还是在发现问题的时候总结下来发给他们的工程师。现在项目到了一个阶段之后,稍微有点时间就总结下音频焦点这块的知识了。当然首先还是要先看文档会比较好,这里有一个官方的文档连接,需要翻墙:...原创 2018-11-16 15:50:23 · 3242 阅读 · 1 评论 -
关于 FileProvider(应用间共享文件)的一点总结
在 Android 7.0 ( N ) 以后调用调用相册、照片、安装 APK 等等都会有可能遇到异常 android.os.FileUriExposedException记得之前有处理过这个问题,今天在安装 APK 时,也遇到以为比较简单,可以快速解决。没想到一天都困在这个 bug 上了(后面讲原因)。经过今天大量的搜索资料,算是系统的学习了一遍这个知识点了吧。一、在 Androi...原创 2018-11-12 21:03:49 · 1317 阅读 · 0 评论 -
Android 8.0 通知栏不显示
由于 Google Play 现在限制了上传 APK 的 targetSdkVersion,所以在新项目中就开始把版本号升到最高,这样一来之前前人写的一些代码库就会出现兼容性的问题,比如下载更新 APK 时,FileProvider 问题(我上一篇有讲到过)。比如在下载的过程中,之前写好的通知栏中显示进度。但是在 targetSdkVersion > 26 时,会被屏蔽掉。Android...原创 2018-11-13 16:27:33 · 1508 阅读 · 0 评论 -
Android:媒体按键消息
具体的使用方法: 用 AudioManager 对象注册一个 MediaoButtonRecevie,让它成为 MEDIA_BUTTON。 audioManager = context.getSystemService(Context.AUDIO_SERVICE) as AudioManager audioManager!!.registerMediaButtonEventRece...原创 2018-10-27 10:50:14 · 904 阅读 · 0 评论 -
Android: 如何切换 SCO 链路。
最近在做蓝牙音箱开发,在 A2DP 和 HFP 来回切换的时候,遇到了手机兼容性的问题。最终发现设备收声和手机收声,是因为 soc 切换有问题。原先在网上找了一些资料发现其实还蛮简单的。就两句话,当时没想这么多就直接写了,发现还真能从设备收声,然后就没管了。然后客户反馈很多手机不能从设备收声,尤其是三星、华为最为严重。好吧,查了很多资料,同时跟嵌入式开发对代码。 SOC 都连接上了,还是不行。最终...原创 2018-10-24 15:47:23 · 2684 阅读 · 12 评论 -
集锦:开发中的一些异常报错和解决的方法
1、异常:Unknown features (Run Configuration[AndroidRunConfigurationType], Facet[android, android-gradle])今天早上一打开 Android Studio 就慕名奇妙包这个错误,尝试了很多方法。后来发现这是我昨天下班的时候,正在编译项目就把电脑关了,可能导致了一些配置文件发生改变所引...原创 2018-08-15 10:06:21 · 314 阅读 · 0 评论