
android
tushiba
这个作者很懒,什么都没留下…
展开
-
EditText文本位置显示
EditText标签中将android:gravity属性值设为left|top。以使输入的文本从左上角开始显示,如果不设置该属性,则输入的文本会从左侧中心位置开始显示(由于设置了android:line=”3”,因此,EditText可同时显示三行的内容,所以会存在这个问题,如果只显示一行,则不存在这个问题)原创 2017-07-05 18:23:43 · 4462 阅读 · 0 评论 -
自定义Gradle插件 + ASM实现字节码插桩
1. Gradle自定义插件实现gradle实现自定义插件一般有三种方式: 1. build.gradle中直接编写,项目内使用 2. 创建buildSrc module,项目内使用 3. 创建独立module,可发布远程仓库考虑到灵活性,选择第三种方式实现自定义插件1.1 创建module创建一个新的module,删除不必要的文件,只留下build.gradle, src/main这两个文件和文件夹1.2 创建目录和配置文件1.2.1...原创 2020-05-27 18:34:34 · 2394 阅读 · 1 评论 -
ClassLoader加载类时序图及Qzon修复流程图
很少画UML时序图,有点难顶ClassLoader加载类时序图,parent.loadClass()处为循环,不知道这样画对不对Qzon修复流程图原创 2020-04-15 15:27:33 · 384 阅读 · 0 评论 -
隐式跳转引发的默认应用选择界面bug(选择要使用的应用)
概况近两日发现APP打开和被人挤下线重新登录时会弹出一个应用选择界面,里面罗列的可选择应用两个都是自己的APP原因排查后发现是隐式跳转引起的问题,之前为了做从浏览器跳转APP的需求,在启动页设置了intent-filter,里面的data只设置了scheme,值为应用英文缩写,而在应用内多处用到了路由跳转页面的功能,也是用的隐式跳转,scheme,host,path都齐全,其中sc...原创 2020-04-08 14:01:25 · 569 阅读 · 0 评论 -
Android Studio 快速定位错误行
AS快速定位错误行用F2和Shift + F2是很方便的,但之前升级到了AS3.5发现使用F2不会直接跳转到错误行,而是挨个跳转inspection的错误解决方法:左上角 File---->setting---->General,拉到底部,勾选如下图红框处选项,意思是跳转错误行的动作只会跳转高优先级的错误...原创 2020-03-11 15:04:42 · 2125 阅读 · 1 评论 -
APP部分漏洞及解决方法
公司APP在教育移动互联网应用程序备案管理平台上收到通报预警,陈列了部分需要解决的漏洞,陈列如下1.漏洞-动态注册Receiver风险解决方法:1.在 AndroidManifest.xml 文件中静态注册 BroadcastReceiver,同时设置 exported="false"。2.必须动态注册 BroadcastReceiver时,使用registerRecei...原创 2020-01-07 10:04:26 · 2043 阅读 · 0 评论 -
Android TV开发---WIFI设置跳转
采用如下显式跳转会有点小问题,在跳转成功的时候就会回调onActivityResult,在返回的时候不调用,无法准确判断wifi是否已开启Intent intent = new Intent();intent.setClassName("com.android.settings", "com.android.settings.Settings");startActivityForResu...原创 2019-09-23 18:41:12 · 1071 阅读 · 0 评论 -
Android中利用layer-list和shape制作阴影背景
利用<layer-list >....</layer-list>叠加<item>,控制每一层间距逐渐减小,颜色逐渐减淡,最后呈现扩散模糊效果的阴影<?xml version="1.0" encoding="utf-8"?><layer-list xmlns:android="http://schemas.android.com/apk/...原创 2019-09-12 17:25:55 · 347 阅读 · 0 评论 -
Kotlin委托之提供委托理解
提供委托通过定义 provideDelegate 操作符,可以扩展创建属性实现所委托对象的逻辑。 如果 by 右侧所使用的对象将 provideDelegate 定义为成员或扩展函数,那么会调用该函数来 创建属性委托实例。provideDelegate 的一个可能的使用场景是在创建属性时(而不仅在其 getter 或 setter 中)检查属性一致性。例如,如果要在绑定之前检查属性名称...原创 2019-08-25 14:14:03 · 459 阅读 · 0 评论 -
听大佬学习生活分享后的总结感悟
今天听了一位Android大佬的学习生活分享讲座,获益良多,在此提炼总结一下1. 工作与学习1. 工作必须合理安排,需求再评估,进度精细到每天2. 需求填充完成,但必须熟悉业务(流程图)3. 业务架构视具体业务而定,通过写博客记录4. 技术人员熟悉业务是很大的优势5. 紧急,插入需求一定要沟通(运营,产品),安排好与已有需求的先后顺序2. 生活1. 工作...原创 2019-08-19 00:04:41 · 3037 阅读 · 0 评论 -
manifestPlaceholders占位符失效
今天打包的时候,运营表示需要一个vivo渠道的包,桌面名称要和其他渠道不同,如果只有这一次需求的话,大可以修改了清单文件中的application的label就行,打完包后再改回原来的,但考虑到目前马甲包的数量以及后续的升级打包,还是决定在gradle中做渠道区分配置,不同渠道使用manifestPlaceholders占位符替换label的字符串引用,形式如下VivoStore { ...原创 2019-07-22 16:18:17 · 2629 阅读 · 3 评论 -
日期常用工具类记录
public class DateUtils { //获得当前时间天数 public static int getCurrentDays() { Calendar now = Calendar.getInstance(); int dayOfYear = now.get(Calendar.DAY_OF_YEAR); Log.e("T...原创 2019-08-02 16:21:43 · 241 阅读 · 0 评论 -
Gradle DSL method not found: 'project()'
导入新的Module时出现Gradle DSL method not found: 'project()',检查setting.gradle里include配置是否有问题,有没有把Module正确include遇到这个问题有几次了,记录一下原创 2018-07-11 23:58:08 · 959 阅读 · 0 评论 -
接口设计规范
今天产品经理告诉我说我们的软件被人破解了,我的表情:(´゚Д゚`)(゚Д゚≡゚Д゚),然后就是一番验证,最后得出结论对方反编译后改了一处变量的判断,导致一直为true,这个逻辑涉及到产品购买,非常严重。后台开发说在给接口的时候,无论是否已购买都把关键信息一股脑传给了前端,由前端本地再做判断决定是否展示产品的关键信息,现在想来这个接口设计得十分不规范,在产品未购买前,有关购买后才能显示使用的信息不能...原创 2018-07-12 16:14:48 · 1689 阅读 · 0 评论 -
git 远程仓库与本地仓库关联
遇到几次这个问题,记录一下流程:1. 新建本地仓库关联 1. 在需要建立本地仓库的位置调出git bash 2. 输入git init,初始化本地仓库 3. 输入git remote add origin 仓库地址, 添加远程仓库 4. 如果远程仓库中有提交历史,输入git pull origin master,将提交历史和文件拉到本地仓库,有冲突解决冲...原创 2018-08-08 15:33:09 · 1527 阅读 · 0 评论 -
java空白注释正则替换
匹配java中多行空白注释: /\*[\s*]*\*/ 匹配java中单行空白注释: //\s \s表示空白符,包括空格、换行、tab缩进等所有的空白/\*匹配开头的/*[\s*]*匹配中间的0个或多个空白符以及多出的*\*/匹配结尾的*/...原创 2018-09-27 11:23:44 · 476 阅读 · 0 评论 -
Android 修改包名无法运行activity class does not exist
最近在做马甲包,将原包复制后,在AS中修改了包名,结果运行时提示activity class does not exist,主activity不存在,我看了错误信息,发现主activity路径之前还存在着原包的路径,clean,rebuild都没有效果 后来将gradle中的applicationId config.applicationId删除,默认为清单文件中的package...原创 2018-10-26 10:23:28 · 3047 阅读 · 5 评论 -
Android gradle根据渠道采用不同的图标和应用名
有时候项目在不同渠道下要使用不同的应用图标和应用名,每次手动替换费时费力,可以在gradle中配置,一步到位buildTypes { debug { manifestPlaceholders = [app_name: "@string/app_name", app_icon: "@mipmap/icon_logo"] } ...原创 2018-11-10 18:17:25 · 2068 阅读 · 0 评论 -
为什么你们都能看我的相册? Android权限划分探讨
说是探讨,其实是我来说些突然想到的,不成熟,不一定正确的想法,今天在微博上看了一篇披露京东金融获取用户截图的文章,后面引出了各种APP在Android,IOS上对用户信息的窃取问题,有博主提到“因为发送照片有系统 API 可以调用,就是你打开 Safari 在网站上选择文件弹出的那个框,不需要申请相册权限。Android 中也有一样的东西,应用完全不需要相册权限就可以获得用户选择的照...原创 2019-02-23 17:23:26 · 1423 阅读 · 0 评论 -
编译签名打包过程三方包依赖冲突
问题描述 最近更新了保利威视的视频播放相关sdk,打包编译的时候发现有jar包重复类冲突,message会有 .....duplicate entry: ../../a/a.class 类似的提示,以前很少碰到这种问题,我的想法是引入的三方依赖中其自身引用的jar包有重复导致冲突发生 解决方法我一开始的解决方法是根据提示,双击shift全局文件搜索,找出重复类所在的jar包如...原创 2019-02-14 11:35:13 · 239 阅读 · 0 评论 -
对AsyncTask源码分析文章的一些补充
最近看了Android 多线程:AsyncTask的原理 及其源码分析这篇文章,对AsyncTask的原理和源码方面的知识有了较为清晰的认识,不过在看文章过程中还是遇到有些部分无法连贯起来,后面自己翻了翻源码,在这里做一个补充先介绍一下AsyncTask创建实例时源码中的一些方法和处理 /** * Creates a new asynchronous task. This c...原创 2019-06-17 16:14:15 · 147 阅读 · 0 评论 -
应用内部更新在Android8.0下遇到的问题
首先是前置准备工作,基本和7.0一样,在清单文件中申明 <provider android:name="android.support.v4.content.FileProvider" android:authorities="${applicationId}" android:exported="fa...原创 2019-07-17 16:39:27 · 307 阅读 · 0 评论 -
Handler, Message 消息传递机制
Handler, Message 消息传递机制个人理解在创建handler之前,必须确认已经在handler所在线程中调用了Looper.prepare(),因为在handler构造函数中会判断当前线程中是否有Looper对象,没有则报异常(无法在没有调用Looper.prepare()的线程中创建handler对象) Looper.prepare作用:1:判断当前线程中是否...原创 2017-06-30 00:51:23 · 573 阅读 · 0 评论