android
文章平均质量分 65
longforus
安卓码农
展开
-
刷了Pixel Experience后刷不进twrp怎么办?
结果就成功了,哈哈哈,方便多了。原创 2023-07-01 11:14:39 · 1866 阅读 · 2 评论 -
root的设备开机自动开启WIFI ADB
代码】root的设备开机自动开启WIFIADB。原创 2022-07-29 10:36:13 · 2783 阅读 · 0 评论 -
JNI的简单动态注册及反编译查看
在常规的JNI静态注册中,用IDA打开对应的so(share object)库后就能直接在Exports选项卡中找到对应的方法入口:external fun staticRegister(f1:Float,f2:Float):Float比较容易被找到切入点,除了静态注册这种方法外,还有一种动态注册的方式,相对来说可以隐秘一些,增加逆向难度.实现kt//as这里会爆红:Cannot resolve corresponding JNI function Java_com_longforus_tes原创 2021-11-17 18:38:46 · 1503 阅读 · 0 评论 -
一键实现打release包 -> 360加固 -> 存档,并在后期一键实现针对某一版本生成Sophix补丁的gradle脚本
一键实现打release包 -> 360加固 -> 存档,并在后期一键实现针对某一版本生成Sophix补丁的gradle脚本最近升级项目把Bugly-Tinker换成了Sophix,因为使用了阿里的tlog服务,之前用Bugly的更新服务,现在也没有使用了,索性就把CrashReport和Hotfix都切过来吧,还有一点是Bugly-Tinker的更新比较不及时,AGP的版本需要留在3.5.3才能有比较好的体验,升级了之后需要诸多调整,而且补丁也从3.5.3的几KB增加到了几百KB,从服务支持原创 2021-06-16 18:43:37 · 1399 阅读 · 0 评论 -
开启MultiDex仍然报65535方法数的一种情况的解决
最近项目打Release包的时候,爆出了65535的错误,之前一直是正常的.在网上搜索,都是叫开MultiDex,现在的正经项目,没有几个没开了的吧?我的肯定是开了的.但是MainDex还是爆了.我的maindexlist.txt也只keep了最主要的类:com/longforu/xx/SmAppProxy.class //TinkerApplication代理类androidx/multidex/MultiDex.classretrofit2/http/PATCH.class有一篇文章讲到了这个原创 2021-05-31 10:57:50 · 338 阅读 · 2 评论 -
Kotlin Coroutine的超时处理
这2天在跟着kotlin的官方文档练习阅读,复习协程.看到Cancellation and timeouts的时候,觉得自己之前的超时处理逻辑如果切换成withTimeout将会更加简洁.果然官方教程是最好的教程.先看看我之前的实现: val timeOut = lifecycleScope.async { delay(40 * 1000) LogUtils.e(TAG, "上传超时 onTimeout: 45s") false } val uploadResult =原创 2021-03-30 16:34:18 · 3967 阅读 · 0 评论 -
Android自定义键盘的几个小点
最近的项目中需要输入字母,且环境有一些特殊的要求:不能跳出当前APP只需输入大写字母和数字一般的第三方输入法都有跳出当前APP的路径,这是不允许存在的,机器7.0自带的键盘也非常的不好用,复杂而且不符合国人习惯.项目之前是用RecycleView在应用界面内实现输入数字,避免调起系统舒服法来解决上面的这些问题的,但是现在需要输入字母,那个方案就不行了,而且占用较大的界面面积,改版后需要弹出键盘输入.势必要改了.之前的项目因为有的第三方输入法在使用蓝牙设备输入的时候会自动转成拼音,导致输入错误,所原创 2020-11-02 16:55:25 · 397 阅读 · 0 评论 -
出现Default Activity not found的一种情况的解决
大家在用Android Studio的时候可能都遇到过一种情况,点击运行app,as提示"Default Activity not found",出现这种情况的原因是多种多样的,有时候能在as的报错中找到相关信息,有时候却找不到,让人很烦恼.一时找不到原因的情况下,可以按照下面的方法进行尝试.解决尝试有的时候clean项目重新build就能解决了,有时候却不能.点击 File ->Invalidate Caches /Restart清除个人目录下的项目缓存,或则直接删除C:\Users\原创 2020-07-22 18:04:22 · 1088 阅读 · 0 评论 -
Mars Android 接入实践 Note
起源最近的一个项目中,需要接收服务器的消息推送.为了保证消息的及时有效性,自建长连接应该是比较保险的.百度后看中了mars这个库,大厂出品,微信验证,demo齐全,star很多.貌似是没问题的了.但是在后续的过程中,也遇到了一些问题.水水博客,记录一下.接入简单的demo接入尝试的话,按照官方说明接入,差不多就能跑起来了.我是直接clone整个项目,让后导入mars-wrapper这个module的.module比较完善,实现了独立进程的service,通过AIDL实现进程间通信.demo中的服务端原创 2020-06-17 17:58:57 · 903 阅读 · 0 评论 -
Kotlin使用const val的一个注意点
companion object { const val INIT_PAGE_INDEX = "0" const val DEFAULT_PAGE_SIZE = 10 const val PAGE_INDEX_KEY = "pageNum" const val PAGE_SIZE_KEY = "pageSize" ...原创 2020-02-11 11:08:36 · 1022 阅读 · 0 评论 -
Kotlin Code Sorter 一个可以对kotlin代码排序的小插件
A simple plugin for sorting kotlin code.项目地址:https://github.com/longforus/KotlinCodeSorter一个可以对kotlin代码排序的小插件.最近在日常的开发中,发现kotlin的代码排列不如Java的好,在IDEA或者AndroidStudio里面Java的字段一般在前,方法在后,看起来比较感觉比较好.但是在kot...原创 2018-09-23 12:47:07 · 880 阅读 · 0 评论 -
ViewModelProviders 找不到怎么办?
有的小伙在刚开始用ViewModel的时候照着文档写下: MyViewModel model = ViewModelProviders.of(this).get(MyViewModel.class);但是提示ViewModelProviders这个类找不到怎么回事呢?网上乱说一堆,是因为缺少依赖: api "android.arch.lifecycle:extensions:1.1.1...原创 2018-09-20 12:02:32 · 15405 阅读 · 3 评论 -
RxNote
map把一种类型的被观察者转换为任意类型的被观察者Observable.create({ e: ObservableEmitter<Int>? ->//发送的int e?.onNext(1) e?.onNext(2) e?.onNext(3) println(Thread.currentThread().name) e?.onComplete() })...原创 2018-09-28 14:38:14 · 343 阅读 · 0 评论 -
让ADB使用更方便,adb-idea插件升级版发布
起源前段时间鸿洋推送的一篇《推荐3个有用的开源项目》文章中,推荐了一篇github上的ADB 用法大全 ,非常的全面,正如大全中提到的: "ADB,即 Android Debug Bridge,它是 Android 开发/测试人员不可替代的强大工具,也是 Android 设备玩家的好玩具."相信做安卓开发的肯定都会用到.它的功能是非常强大的.但是强大一般也意味着复杂.我除了原创 2018-10-14 13:35:59 · 5410 阅读 · 4 评论 -
Android模块化项目模块版本控制及持续集成方案
分析在使用模块化开发的过程中,模块的复用面临着同步的问题,既在A项目中修改了am模块,如何把修改同步到同样也在使用am模块的B项目中?在之前的模块化开发中这个问题是没有很好的解决的.在多个项目工程中通过复制,存在多份同一模块的实例.且分布在每个项目的svn仓库中,在某工程中修改am模块后只能通过拷贝的方法,把修改的代码复制到另一项目工程的am模块中,非常低效而且很容易出错.解决方案有2个:...原创 2018-11-12 11:14:27 · 1467 阅读 · 0 评论 -
安卓APP首次连接服务器非常慢的问题分析
近期项目中的安卓端App,客户反馈有登录连接慢,耗时长的问题.在测试验证后,有以下分析:出现条件使用https连接的正式服务器环境.安卓手机.使用中国电信手机卡的流量进行连接.App冷启动.在同时满足以上4点条件的情况下,安卓用户会出现App登录很慢的情况.登录是首次连接,从请求到响应需要30s左右的时间.登录成功后,后续请求连接的速度恢复正常.问题分析和解决尝试正式环境下,...原创 2018-12-14 10:32:39 · 4359 阅读 · 3 评论 -
记一次网络请求优化过程
最近接手的项目中,同事反映获取服务器数据有点慢,不如iOS版的流畅,观察OKHttp日志发现,某页面的数据请求耗时700ms左右,但是页面从空白到完成数据展示,感觉耗时在2.3秒左右,在代码中插入耗时计算代码发现,从Presenter构建到请求返回的onNext耗时在2000+ms,初步减去正常的OKHttp耗时,另外有1500ms左右的不明耗时,出现在代码逻辑中.逐步增加耗时计算代码的埋点,缩小...原创 2019-02-28 20:00:45 · 1120 阅读 · 0 评论 -
编辑jar包中class文件的几种方式
在日常的开发中经常使用到第三方一些库,这些库可能提供gradle仓库的依赖,也可能提供jar包,有时候为了我们的一些自定义操作,需要修改这些jar包中的代码.这个时候该怎么做呢?我所了解的可以修改jar中class的几种方式aop编程,使用aop框架hook想要修改的class的方法,自己实现这个方法或者额外的执行一些代码,但既然是aop,aop的目的也不是這样的,aop适合于面向切面的,多...原创 2019-04-10 21:57:23 · 15081 阅读 · 0 评论 -
RxJava在toList()后subscribe()不执行的问题
今天在项目中遇到一个问题:需要遍历一个list在经过2次异步调用修改list中的一些值之后,刷新adapter,通知数据修改.略显复杂,一般的同步修改倒是没有什么了,但是需要进行2次异步调用修改,而且要跳过一些item,还要进行类型转换.最后还要根据异步调用返回的值进行排序,这个就略显复杂了.项目中引入了RxJava2,近几年的项目也一直都在用,今天面临的这种数据流的操作,最合适的也就是它了.遍...原创 2019-03-28 23:21:20 · 2894 阅读 · 2 评论 -
在DialogFragment中使用EditText,onDismiss时关闭键盘无效的问题
最近的项目要实现一个评论框,点击某处触发弹出软键盘,在软键盘上面显示EditText输入评论内容,还有2点需求点击空白处关闭输入框并收起软键盘。发送完评论后也关闭输入框并收起软键盘。在使用DialogFragment中创建Dialog实现了评论框后,2可以正常实现,但是1存在输入框关闭了但是软键盘没有收起的情况。开始以为问题在android.view.inputmethod.InputM...原创 2019-05-27 22:35:30 · 3555 阅读 · 9 评论 -
实现PagedListAdapter中Item动态增删的一种方法
最近在项目中延用了Jetpack库中的一些库。Lifecycles、LiveData、ViewModel等,再尝试了Paging库流程的官方Demo之后,这一次也引入了项目之中。列表加载的体验提高了很多。但是在这一过程中也发现了一些问题,最主要的是不同于传统的RecycleView.adapter,PagedListAdapter不支持对已加载列表的灵活增删。这个在实际的开发中是一个很麻烦的问题,...原创 2019-05-23 23:16:15 · 3928 阅读 · 1 评论 -
一个混淆后报NullPointerException的问题
最近的项目中需要集成一些扫描枪厂家的第三方SDK,前面都还算顺利,今天集成的这一家,开始也没有问题,但是开启了混淆后,会报NullPointerException,提示sdk包中的类找不到.问题比较少见,比较意外,多方尝试后才得到解决.背后的原理也还没有理清,记录备查.问题表现在一个有扫描功能的抽象类中,实例化一个sdk中的类,非常简单.scanManager = ScanManager()...原创 2019-07-29 16:28:44 · 1367 阅读 · 2 评论 -
关于zBar部分手机扫描空白处识别出条码的问题
最近的项目中使用到自己编译的zBar进行条码识别,在自己的手机上一直都没有问题,但是前面有一部小米MAX2s中出现了手机放着不动扫描空白出,尽然识别出了条码的bug.因为这个bug在别的手机上还没有遇到过,而且也比较诡异,未做处理,但是最近反馈说這样的手机也有一些包括小米8.必须要进行处理了.识别流程YESNO摄像头重复获取图像zBar识别识别出条码?处理插入数据库在摄像头重复的回调中,把图...原创 2019-08-15 16:07:57 · 576 阅读 · 0 评论 -
RxJava使用filter时如何知道是否所有的item都被过滤了?
有时候会使用rxJava的filter操作符来过滤重复的数据,用起来非常的方便,返回true的元素会通过,返回false的元素则会被丢弃.但是存在这样一种情况,如果所有的元素都被过滤掉了,丢弃了,后续subscribe的onNext()也不会被调用.这个时候我们要如何得知呢?大多数情况下都不需要关心,但是在有的情况下我们又需要知道,是不是所有的元素都被过滤了.filter操作符本身并没有提供这样...原创 2019-10-08 11:48:18 · 378 阅读 · 0 评论 -
安卓官方模拟器, Parse Error – There is a Problem Parsing the Package
今天测试下载测试apk到sdcard进行安装,安装的时候解析出错:报了一个Parse Error – There is a Problem Parsing the Package的错误反复调试,死去活来,更换编译版本,目标版本,模拟器版本都无效,不论是下载的apk还是DDMS传入的apk全都无法打开安装.直接把apk拖入模拟器又是没有问题的,后来发现该apk在sdcard目录中的权限是:-原创 2016-09-02 23:00:42 · 5056 阅读 · 1 评论 -
安卓开发插件推荐
前言 现在的安卓码农们,基本上都已经把锄头换成Android Studio了吧,Android Studio是基于Jetbrains 的IntelliJ IDEA开发的。 继承了Jetbrains全家桶系列的优良风格:智能,强大,界面美观。。。我刚刚从Eclipse转到IDEA的时候还很不习惯,但是为了这个颜值,还是坚持了下来,后来推出了Android Studio,立马就无缝上手了。和...原创 2018-07-07 15:14:55 · 7547 阅读 · 8 评论 -
安卓自定义输出apk名报Cannot set the value of read-only property 'outputFile' for ApkVariantOutputImpl_Decor..
error错误信息:A problem occurred configuring project ':app'.> Cannot set the value of read-only property 'outputFile' for ApkVariantOutputImpl_Decorated{apkData=Main{type=MAIN, fullName=release, f...原创 2018-06-06 17:20:54 · 1246 阅读 · 0 评论 -
Apt Note - 手动实现简易版Butterknife
早就发现了apt的强大,但是一直没有进行尝试,今天尝试使用apt和javapoet,实现一个简易版的Butterknife.结构anno 这个里面放的annotiation,写到单独的library中.依赖时使用compileOnly ,可以不包含到最终的app中,减少不必要的空间浪费.api 这个里面放的是生成类的接口和bind需要用到的类.compiler 这个是注解处理器....原创 2018-05-07 19:49:37 · 416 阅读 · 0 评论 -
Hybrid App开发笔记
Hybrid App开发笔记开发模式:因为尚属初次尝试.结合业务需求.使用【多View混合型】即Native View和Web View独立展示,交替出现的模式.主要交互的实现:一.使用a标签在用户点击的这个超链接的时候截获该连接.进行分析并获取值,进行下一步的操作.使用场景:点击H5功能列表获取数据并进入native页面.调用java方法(传参不好确定)js实现:在html代码中使用固定头开原创 2017-02-08 16:11:48 · 521 阅读 · 0 评论 -
RxJava回调线程切换
最近又在做环信,他的异步回调在子线程中,用起来不是很好用,恰好项目中用了RxJava就用RxJava来做一下线程切换吧./** * Created by longforus on 2017/1/6 18:58. * Description : 自定义的环信回调线程自动切换代理 */public class MyEmProxy implements EMValueCallBack {原创 2017-01-06 19:49:07 · 1386 阅读 · 0 评论 -
使用OkHttp的addInterceptor功能实现RxAndroid+Retrofit请求结果的统一处理
使用OkHttp的addInterceptor功能实现RxAndroid+Retrofit请求结果的统一处理昨天看了有2个文章:Retrofit响应数据及异常处理策略:http://blog.csdn.net/dd864140130/article/details/52689010以及github上另外一种方法实现的demo: https://github.com/ysmintor/Retrofi原创 2016-11-12 23:01:34 · 3972 阅读 · 1 评论 -
add 'tools:replace="android:value"' to <meta-data> element问题的解决
今天在使用极光推送,并且准备对渠道打包的时候,在manifest中添加了:meta-data android:name="CHANNEL" android:value="${CHANNEL_VALUE}" />多渠道替换通道以后,编译出现如下错误信息:Error:Execution failed for task ':app:processBaiduDebugManif原创 2016-10-11 23:08:41 · 19292 阅读 · 3 评论 -
Android 新版本(包括23别的不知道)权限申请示例
昨天做练习,在低版本下屡试不爽的电话权限申请失效了,原来就是在AndroidManifests.xml 中添加 就好了, startActivity(intent); 的时候也不会报错; 但是昨天在写 startActivity(intent); 的时候as就提醒要检查权限,自动补全后也不能打电话,google发现,新版本需要在执行特殊权限要求的动作钱进行权限检查.没有获得权限的原创 2016-08-13 17:08:37 · 1781 阅读 · 0 评论 -
SQLite CRUD
CRUD就是C(Create)R(Retrieve)U(update)D(delete) 增删改查1.Create: create table t_void (_id integerprimary key,c_name varchar(20),c_age integer,c_phone varchar(20)); 表名 列名 声明为原创 2016-08-11 18:45:06 · 356 阅读 · 0 评论 -
Android xml文件创建和pull解析
public void paresxml(View view) { ArrayListsList = null; String tag ; Sms sms = null; try { XmlPullParser paser = XmlPullParserFactory.newInstance().newPullParser();//获取pull解析对象原创 2016-08-11 17:50:49 · 464 阅读 · 0 评论 -
android studio 测试APP不要全部覆盖安装
今天在调试一个APP的时候 老是提示在mainThread操作网络,反复查看多次几乎确定没有在主线程中操作网络,提示的代码行也并不存在对网络的操作,还有什么break;之类的行,本来从网络解析的xml应该也有8跳,也只解析出有问题的6条,后来忽然想到把模拟器的APP卸载后重新安装再行测试,没想到所有的问题一下就都解决了,原来调试都是覆盖安装的,可能是覆盖不完整导致了这种,未调试好的APP出现的异常原创 2016-08-22 19:37:59 · 2925 阅读 · 0 评论 -
Android用Handler让主线程向子线程发送消息
核心思想:为子线程手动创建looper对象,绑定mQueue,建立持有这个mQueue的handler对象,并调用looper.loop()方法阻塞线程,等待接收到消息后交给handler处理,使用完成后要调用looper.quit()结束线程,释放资源public class MainActivity extends AppCompatActivity implements View原创 2016-08-22 09:36:54 · 889 阅读 · 0 评论 -
Android Junit Test Process
1:自定义一个类 extends AndroidTestCase.2.编写自己的测试方法,可以使用asser的一些方法进行测试import android.test.AndroidTestCase;public class AppTest extends AndroidTestCase { public void add() { int a = 1+2;原创 2016-08-10 14:55:19 · 735 阅读 · 0 评论 -
Android Studio 添加Kotlin extensions 和lambda支持
要添加extensions才能直接使用xml内的ID在project级别的gradle中添加:buildscript { ext.kotlin_version = '1.1.1' repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.3.0'原创 2017-03-17 20:29:26 · 2305 阅读 · 0 评论 -
带有本地数据排序和筛选的RecyclerView Adapter
类主体:/** * Created by XQ Yang on 2017-3-8 15:30:05 * Description : 带有搜索和排序功能的adapter */public abstract class SortFilterRVAdapter extends BaseRecyclerViewAdapter implements MyFilterable { pr原创 2017-03-09 09:57:17 · 2096 阅读 · 0 评论