- 博客(154)
- 收藏
- 关注

原创 Mac aapt apksigner等aapt command not found
1.是因为没用配置环境变量所致2.前提:已安装配置Android SDK(1)打开配置文件(终端打开) open .bash_profile(2)配置环境变量 环境变量如下: export AAPT_HOME=/Users/xxxx/Library/Android/sdk/build-tools/25.0.2 export PATH=$PATH:$AAPT_HOME (3)...
2019-12-30 18:30:46
4491
3

原创 apk签名.apk版本信息
jarsigner -verbose -keystore xxx.keystore -signedjar signed.apk unsigned.apk ‘keyAlias别名’
2019-12-30 17:27:11
414

原创 查看apk签名
1.获取原始签名获取.keystore或.jks的数字签名信息使用jdk里面的keytool命令: keytool -list -v -keystore xxx.keystore2.获取apk中签名需要获得apk文件里面的META-INF文件夹,得到其中的CERT.RSA文件,有两种渠道获取。1.反编译的目录就有产生META-INF文件夹,直接打开就可以看到CERT.RSA文件了。2....
2019-12-30 17:02:43
270

原创 mac加固app反编译apk流程
1.多渠道包生成 工具:酷传 下载地址: http://www.kuchuan.com/client 步骤:登录-工具箱-生成多渠道包点击生成多渠道包上传apk,然后上传渠道包配置列表(列表支持txt和csv格式)Mac 保存为txt,格式为utf-8生成的多渠道包在你选择上传的apk包下自动生成文件夹:酷传智能分包xxx2 .360加固下载客户端,mac上会有一个启动失...
2018-11-16 19:10:18
1013
原创 Recyclerview smoothScrollToPosition()无效问题
对layoutmanaer重写 smoothScrollToPosition方法。参照:源码: smoothScrollToPosition。
2023-03-03 16:00:36
1170
原创 记录Direct local .aar file dependencies are not supported when building an AAR
这种依赖问题应该是由于环境版本变化导致的,根据错误描述说以前的这种直接依赖方式会破坏aar文件,高版本后不再支持,我们这种解决方式是让library在编译时使编译器通过不报错,在主工程拷贝一份的文件在打包后能让程序正常调用。
2023-02-15 16:18:21
741
原创 Android清单mainfest一些属性
多窗口下对应用窗口大小缩放,会触发Configuration变化,可能的变化有screenSize、smallestScreenSize、layoutDirection、screenLayout、orientation,建议Activity的manifest配置configChanges,否则Activity将被销毁重建,可能导致卡顿和跟体验差。③ 如果声明了这个属性,并设置值为false,那么不允许进入多窗口模式,只允许全屏显示。false显示,默认。窗口变化属性configChanges。
2023-02-02 14:03:21
820
原创 WebView使用常见忽视点
这个情况产生的原因是我们在loadUrl的时候,由于新的页面还没有完全加载出来,所以clearHistory没有起作用,因为要保证至少一个页面在最上边,所以上一个页面没有被移除掉。当我们在WebView中加载出从web服务器上拿取的内容时,是无法访问本地资源的,如assets目录下的图片资源,因为这样的行为属于跨域行为(Cross-Domain),而WebView是禁止。Android的返回键, 如果想要实现WebView内网页的回退, 可以重写onKeyEvent()方法。面assets下的资源了。
2023-01-18 17:04:28
1692
原创 android生成javadoc
在Other command line arguments 栏输入:-encoding utf-8 -charset utf-8。菜单 Tools -> Generate JavaDoc,弹出配置面板。菜单 Tools -> Generate JavaDoc!
2022-12-28 10:54:06
511
原创 koltin顶级函数的单元测试
1.反射2.遇到的错误:The problem is a missing dependency in build.gradle.……}:
2022-12-21 15:41:13
500
原创 单元测试原则 first air
单元测试应该是可以快速运行的,在各种测试方法中,单元测试的运行速度是最快的,通常应该在几分钟内运行完毕。单元测试必须及时的进行编写,更新和维护,以保证用例可以随着业务代码的变化动态的保障质量。单元测试应该是可以独立运行的,单元测试用例互相无强依赖,无对外部资源的强依赖。单元测试应该是独立运行,互相之间无依赖,对外部资源无依赖,多次运行之间无依赖。单元测试应该可以稳定重复的运行,并且每次运行的结果都是相同的。单元测试应该是自动运行,自动校验,自动给出结果。单元测试是可重复运行的,每次的结果都稳定可靠。
2022-11-19 17:11:39
952
原创 在build.gradle中定义和调用自定义方法
为项目范围创建的,即.全局可用于项目,可以在构建脚本中的任何位置使用myMethod(p1, p2)等效的方式调用project.myMethod(p1, p2)
2022-11-19 16:33:23
987
原创 android单元测试Esspresso测试popupwindow,webview
【代码】android单元测试Esspresso测试popupwindow,webview。
2022-11-16 16:43:49
683
原创 常用adb命令
就能看到PackageName,VersionCode,LauncherActivity等信息。2、然后使用aapt dump badging XXX.apk。aapt dump badging 路径.xx.apk。
2022-09-06 11:17:52
5335
原创 gerrit本地代码关联到远程仓库
1.在想要创建的git的目录下用以下指令,创建一个本地仓库不如:MyApplication执行:remote-url 替换为远程仓库地址此处步骤可以使用ide操作,比较直观step5 添加需要跟踪的文件6.提交ID 是需求id,或者修改bug的bugid如果本地没有readme文件 执行 会报错是可以允许不相关历史提交,强制合并9.hookxx是当前git用户名ip是hook地址步骤8直接到11会报错,提示添加change-id,根据提示执行步骤9,10gerrit不允许用户直
2022-07-04 14:27:39
1381
原创 kotlin协程启动源码分析
代码启动协程附上kotlin bytecode decomplie代码launch启动kotlin源码实现如下:CoroutineScope扩展函数launch1.会将launch方法传入的context与CoroutineScope中的context组合起来2.如果combined中没有拦截器,会传入一个默认的拦截器,即Dispatchers.Default,这也解释了为什么我们没有传入拦截器时会有一个默认切换线程的效果默认情况下,我们会创建一个StandloneCorouti...
2022-07-02 18:57:37
818
原创 kotlin函数嵌套
Kotlin 中提供了函数的嵌套,在函数内部还可以定义新的函数。这样我们可以在函数中嵌套这些提前的函数,来抽取重复代码。上面的代码在判断 name、address 等是否为空的处理其实很类似。这时候,我们可以利用在函数内部嵌套的声明一个通用的判空函数将相同的代码抽取到一起:2.扩展函数嵌套除了利用嵌套函数去抽取,此时,其实也可以用扩展函数来抽取,如下所示:/** 利用扩展函数抽取逻辑* */...
2022-06-30 19:46:19
795
转载 kotlin JVM注解
@JvmStatic 告诉jvm⽣成静态⽅法和成员@JvmOverloads ⽣成Java重载⽅法,应⽤于kotlin⽅法有默认值⽣成对于的java⽅法@JvmName 改变getter和setter中的⽅法名@JvmField 直接暴露类中的属性和@Throws 声明这个⽅法要检查Exception@JvmMultifileClass@JvmSynthetic但是kotlin的许多官⽅库会⽤到他 讲⽩了 如果你写的⼀个函数你只想给kotlin代码调⽤ ⽽不想给java的代码调⽤ 那你就在你的函
2022-06-30 09:31:09
238
原创 Android面试中常问的ANR问题
Android应用的主线程处于阻塞状态的时间过长,触发"Application not Responding"(Anr)的错误.如果应用处于前台,会有弹窗.1.主线程耗时操作2.主线程被子线程同步锁lock3.主线程被binder对端阻塞4.binder线程被沾满5.得不到系统资源1.Service TimeOut超时超时原因:在执行服务的生命周期方法:oncreate ,onstart onbind的时候超时超时时间: 前台服务20s,后台服务200s2.BroadCast TimeOut
2022-06-03 12:00:41
938
原创 Failure [INSTALL_FAILED_TEST_ONLY: installPackageLI]
今天adb命令安装apk,提示下面的错误:Failure [INSTALL_FAILED_TEST_ONLY: installPackageLI]方法1:修改AndroidManifest.xml 中android:testOnly=”true” 改成 android:testOnly=”false”,或者直接去掉。方法2:adb push .apk /tmpadb shell pm install -t /tmp/.apk方法3:adb install -t *.apk...
2022-05-26 16:18:11
221
原创 WebView优化
过程分析对于一个普通用户来讲,打开一个WebView通常会经历以下几个阶段:交互无反馈到达新的页面,页面白屏页面基本框架出现,但是没有数据;页面处于loading状态 出现所需的数据如果从程序上观察,WebView启动过程大概分为以下几个阶段:图片摘自美团技术团队点开某个网页的那一刻发生了什么。举个例子,假如你点开了手机腾讯网,浏览器首先会通过DNS查到这个网站的真是ip地址,然后向该ip地址发起http协议的请求,请求拉取手机腾讯网的html页面。这时候你的手机和腾讯网的服务器悄悄的
2022-05-26 15:04:49
1301
转载 webview白名单
1.添加白名单验证的时机1.loadurl2.shouldOverRideUrlLoading3.如果需要对白名单进行安全等级划分,还需要在JavascriptInterface中加入校验函数,JavascriptInterface中需要使用webview.getUrl()来获取webview当前所在域风险提示:上面这些都做了还有可能被攻击,比如白名单中的服务器存在XSS漏洞,或者白名单中的服务器被攻击者控制,或者webview访问没有采用安全的传输通道导致被中间人劫持等,都可以在白名单信任域中注
2022-05-23 20:14:20
1651
原创 Android内存泄漏情况总结
1.内存泄漏的概念:通俗点讲:生命周期长的对象持有生命周期短的对象的引用,导致GC无法回收短生命周期对象。系统来说:2.内存泄漏的原因:1.常见类型的内存泄漏2.Android Api使用导致的内存泄漏...
2022-05-15 20:59:11
1565
原创 webview中关于cookie的调研
1.webview cookie保存在本地项目中使用 WebView 其实会自动将 Cookie 保存在本地数据库中。保存是路径为 data/data/package_name/app_WebView/Cookies 虽然不是 .db 结尾的,实际就是一个 .db 文件,如果不设置有效期,除非websid,sid更换,不会失效2.webview中的cookie不会随着页面关闭而清除会话cookie在WebView关闭时不会过期,您必须自己管理它.开启cookie if (androi
2022-05-14 21:47:20
1595
2
原创 java重写OverRide和重载OverLoad的区别
概要1.这是相对java多态属性来讲的.是多态的两种表现形式.2.多态一般需要结合继承使用.多态本质是子类通过覆盖或重载父类的方法,使对同一类对象同一方法产生不同的结果.多态使用需要注意父类与子类的关联性,如是否必须重写,重写后是否还需要父类继续执行等.这些都是细节问题,编程中需要注意.概念区分重写1.重写是子类对父类允许访问方法的实现过程的重写,返回值和形参不能改变,只能改变方法内的实现.重写方法不能抛出新的检查异常或者比被重写方法申明更加宽泛的异常。参数列表与被重写方法的参数列表必须完全
2022-05-14 08:00:06
387
原创 性能优化之Apk瘦身
基本瘦身1.工具(Lint检测代码)箭头1:全面检测检测维度:大牛文章:https://www.cnblogs.com/andy-songwei/p/7090934.htmlhttp://www.javashuo.com/article/p-vtcbvgwr-nc.html箭头2:按照具体检测类型lint2.图片处理:1.图片压缩推荐批量压缩(使用插件:TinyPngPlugin)1、Tools --> TinyPngPlugin2.用WebP格式进行替换3.混淆处理 mi
2022-05-12 19:55:34
332
原创 QA软件质量相关一些概念
覆盖率:覆盖率是度量测试完整性的一个手段,是测试有效性的一个度量。通过已执行代码表示,用于可靠性、稳定性以及性能的评测。测试覆盖是对测试完全程度的评测。测试覆盖是由测试需求和测试用例的覆盖或已执行代码的覆盖表示的。建立在对测试结果的评估和对测试过程中确定的变更请求(缺陷)的分析的基础上。覆盖指标提供了"测试的完全程度如何"这一问题的答案,最常用的覆盖评测是基于需求的测试覆盖和基于代码的测试覆盖。简而言之,测试覆盖是就需求(基于需求的)或代码的设计/实施标准(基于代码的)而言的完全程度的任意评测,如用例
2022-05-11 13:53:14
241
原创 协程与kotlin协程挂起
协程的概念最早的协程概念出自1963年.经历多代发展.现在支持协程的编程语言有:Golang、Kotlin、C按调用栈分协程分为有栈stackful和无栈stacklessGolang里的goroutine是有栈;JavaScript,Kotlin async/await是无栈两者的含义不是指协程在运行时是否需要栈,一个函数调用另一个函数,总是存在调用栈的;而是指协程是否可以在其任意嵌套函数中被挂起.有栈协程是可以的,而无栈协程不可以简要概括按调度方式分协程分为对称和非对称在协程调度过程中,
2022-05-01 15:13:48
1498
原创 JVM虚拟机内存结构和JAVA内存模型
JVM(Java Virtual Machine)JMM(Java Memeory Model) java内存模型1.工作内存每条线程都有自己的工作内存(Working Memory,又称本地内存, 可与前面介绍的处理器高速缓存类比),线程的工作内存中保存了该线程 使用到的变量的主内存中的共享变量的副本拷贝。工作内存是 JMM 的 一个抽象概念,并不真实存在。它涵盖了缓存,写缓冲区,寄存器以及其 他的硬件和编译器优化。2.主内存主内存 Java 内存模型规定了所有变量都存储在主内存(Main M
2022-04-28 15:38:41
413
原创 非静态内部类的使用注意事项
1.非静态内部类的构造器package com.example.javalib;import java.lang.reflect.InvocationTargetException;public class OuterClass { public class InnerClass{ } public static void main(String[] args) throws InvocationTargetException, NoSuchMethodExceptio
2022-04-27 19:26:44
468
原创 static关键字
1.作用域:只能修饰在类里的成员:方法,Field,内部类,初始化代码块,内部枚举类2.功能效果:就是把类里定义的成员变成静态成员,即类成员.3.静态方法属于类被static修饰的成员(方法,Field,内部类,初始化代码块,内部枚举类)属于类本身,而不是单个java对象.上图代码证明:静态成员属于类,并不属于java对象.4.static修饰的方法属于类,不属于某个实例,so父类的static方法不允许被子类重写.5.静态内部类的限制:静态内部类不能访问外部类的非静态成员....
2022-04-27 15:56:51
1749
原创 Android studio 运行java程序
步骤1 :File —–> new —–> new Module… 然后弹出一个框 在more module 里面选择java Library 如图:so,建立的java程序为:如图:步骤二:接下来进行java程序的配置:步骤三run或者run结果:
2022-04-27 15:37:40
3111
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人