Android
文章平均质量分 61
piracy123
这个作者很懒,什么都没留下…
展开
-
adb 查看cpu处理器架构
adb shell getprop ro.product.cpu.abi原创 2020-04-29 19:56:44 · 9981 阅读 · 0 评论 -
IDA常用快捷键说明
IDA Pro:交互式反汇编器,是典型的递归下降反汇编器。导航条:蓝色 表示常规的指令函数黑色 节与节之间的间隙银白色 数据内容粉色 表示外部导入符号暗黄色 表示ida未识别的内容IDA主界面:IDA View三种反汇编视图:文本视图、图表视图、路径视图Hex View 十六进制窗口Imports 导入函数窗口...原创 2019-12-09 16:50:16 · 2656 阅读 · 0 评论 -
IDA动态调试so 指南
首先我们如果想要在调试的so的初始化JNI_OnLoad的函数里面下断点,去测试是否有反调试等操作,首先应该以启动调试模式去操作。第一步:首先以debug模式去启动调试的app程序。命令为: adb shell am start -D -n 包名/.activity名字以debug模式启动后,打开ddms工具,查看下是否有小红蜘蛛出现了,如果出现了则说明关联上了。第二步:启动a...原创 2019-12-06 15:12:21 · 1716 阅读 · 0 评论 -
java常用算法题之比较版本号
public static int compareVersion(String version1, String version2) { String[] s1 = version1.split("\\."); //通过\\将.进行转义 String[] s2 = version2.split("\\."); int len1 = s1.lengt...原创 2019-12-04 10:40:35 · 1026 阅读 · 1 评论 -
android 尽量不要使用static静态变量
使用静态static静态变量潜在性问题:1.占用内存,并且内存一般不会释放;2.在系统不够内存情况下会自动回收静态内存,这样就会引起访问全局静态错误。3.不能将activity作为static静态对象,这样使activity的所有组件对象都存入全局内存中,并且不会被回收; (转自:http://blog.csdn.net/ctcwri/article/details/8858414...转载 2018-12-07 15:53:56 · 4731 阅读 · 0 评论 -
static变量与App状态缓存
App启动,static变量装载过程启动App OS开启新Process进程并分配进程ID(PID)及进程表 进程启动DVM实例(Dalvik VM,沙箱模式,每个App均运行在各自DVM内) DVM负责管理class类的装载、卸载、类实例的生命周期、GC回收等过程 class类装载到DVM时,分配static变量空间并进行变量值初始化static变量一旦初始化,将由JVM负责维护管...转载 2018-12-07 15:55:22 · 455 阅读 · 0 评论 -
Android studio动态调试smali
用到的工具①Android Studio最新版。②apktool尽量使用最新版的。③ideasmali插件。下载地址https://github.com/JesusFreke/smali/wiki/smalidea首先第一步需要在as里面安装ideasmali的插件 装完重启之后。我们将反编译的apk安装到手机中,以debug模式去运行他,adb shell am ...原创 2019-02-21 14:42:19 · 3128 阅读 · 1 评论 -
简单小游戏雷电逆战的破解
今天逆向下雷电逆战这个游戏,首先找到游戏的支付页面,先测试支付下,回调回来的结果是支付失败,接下来我们打开ddms,将logcat做下过滤,在application name 下将此应用的包名设置为过滤符可以看到,在回调支付失败的同时,打印了 一下信息,提示购买道具失败。我们可以通过打印的log信息,去查询下这个方法在哪调用过。打开androidKiller 工具,通...原创 2019-02-22 13:04:37 · 518 阅读 · 0 评论 -
smali 语句invoke 详解
invoke-static 是类静态方法的调用,编译时,静态确定的; invoke-virtual 虚方法调用,调用的方法运行时确认实际调用,和实例引用的实际对象有关,动态确认的,一般是带有修饰符protected或public的方法; invoke-direct 没有被覆盖方法的调用,即不用动态根据实例所引用的调用,编译时,静态确认的,一般是private或<init>方法; ...原创 2019-03-10 20:54:34 · 23951 阅读 · 1 评论 -
smali const函数的测试
const/4 表示半个字节,四位 ,范围在 -8 ~7 之间const/16 表示两个字节 ,16位 范围在 -32768~32767之间const代表四个字节,32位 范围在-2147483648~2147483647之间事实证明应该是davik虚拟机在解析dex文件的时候根据int值进行了优化吧。...原创 2019-03-11 16:34:56 · 2972 阅读 · 1 评论 -
adb backup 漏洞
Android API Level 8及其以上Android系统提供了为应用程序数据的备份和恢复功能,此功能的开关决定于该应用程序中AndroidManifest.xml文件中的allowBackup属性值[1] ,其属性值默认是True。当allowBackup标志为true时,用户即可通过adb backup和adb restore来进行对应用数据的备份和恢复,这可能会带来一定的安全风险。...原创 2019-03-12 17:19:23 · 3727 阅读 · 0 评论 -
阿里云jcenter镜像
maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/' }原创 2019-04-17 17:53:52 · 7498 阅读 · 0 评论 -
android 下v1和v2签名的区别
v1 兼容所有版本 7.0以上不安全 v1签名有RSA和SF非对称加密文件 v2 7.0以上可以用,7.0以下装不上 v2没有非对称加密文件 v1+v2 都兼容...原创 2019-05-06 17:24:00 · 1211 阅读 · 0 评论 -
关于=null和clear() 问题(Java性能篇)
以ArrayList为例,根据情况来看吧,ArrayList内部维护的是一个数组。1. list = null 那么你list = null; 就是释放这个数组对象,当然里面所引用的对象也就释放了。2. list.clear() 如果list.clear(); 看看源代码就知道了,是把list里面对象遍历赋值为null,意思就是释放list里面所有对象。这样就很清楚了...转载 2018-10-18 14:59:27 · 823 阅读 · 0 评论 -
android下常用静默安装方式
简单说下已知的有三种。第一种前提是root过的系统。执行shell 命令su 超级用户权限进行 pm install 路径。apk进行静默安装。第二种是集成到rom 的具有system权限的app。通过将清单文件加入 android:sharedUserId="android.uid.system" 这个权限。以及通过预装到该系统源码的签名文件。platform.pk8 以及platfor...原创 2018-07-20 16:00:34 · 430 阅读 · 0 评论 -
android 7.0 静默安装实现方式源码解析
第一种方法:通过 getPackageManager()拿到系统的packageManager对象。通过packagemanger类去直接反射调用installPackage方法就行。输入相应的参数。Invoke调用方法。就能实现了。具体方法如图。其实反射调用了packageManager类的这个方法。这个packageManager是个抽象类。他的实现类其实是Applica...原创 2018-07-24 11:05:52 · 1572 阅读 · 0 评论 -
ListView的性能优化之convertView和viewHolder
最近碰到的面试题中经常会碰到问”ListView的优化”问题。所以就拿自己之前写的微博客户端的程序做下优化。自己查了些资料,看了别人写的博客,得出结论,ListView优化大致从以下几个角度:1.复用已经生成的convertView;2.添加viewHolder类;3.缓存数据(图片缓存);4.分页加载。一、复用convertView首先转载 2017-01-06 20:41:50 · 312 阅读 · 0 评论 -
Java 构造方法和成员变量初始化顺序
一定要注意,成员变量按照其声明的顺序会被初始化,并且立刻被初始化为二进制的0,这个动作发生在所有事件之前,也就是编译器会立刻将分配给对象的空间初始化。最后就是调用类的构造方法了。执行顺序:执行父类静态代码 执行子类静态代码初始化父类成员变量(我们常说的赋值语句)初始化父类构造函数初始化子类成员变量初始化子类构造函数转载 2017-01-12 19:41:50 · 12082 阅读 · 0 评论 -
简单的构建者模式
public class Person{ public Person(){ } private String name; private int age; private String sex; public Person(String name,int age,String sex){ this.name=name原创 2017-03-22 21:50:57 · 352 阅读 · 0 评论 -
同步异步与阻塞与非阻塞
老张爱喝茶,废话不说,煮开水。出场人物:老张,水壶两把(普通水壶,简称水壶;会响的水壶,简称响水壶)。1 老张把水壶放到火上,立等水开。(同步阻塞)老张觉得自己有点傻2 老张把水壶放到火上,去客厅看电视,时不时去厨房看看水开没有。(同步非阻塞)老张还是觉得自己有点傻,于是变高端了,买了把会响笛的那种水壶。水开之后,能大声发出嘀~~~~的噪音。3 老张把响水壶放到火上,立等水转载 2017-03-16 19:17:23 · 323 阅读 · 0 评论 -
为什么不能在BroadcastReceiver中开启子线程
如果开发者需要在Service处理耗时任务,建议在Service中另外启动一条新线程来处理该耗时任务.就像前面BindService中看到的,程序在BindService中的onCreate()方法中启动了一条新线程来处理耗时任务.可能有读者感到疑惑:直接在其他程序组件中启动子线程来处理耗时任务不行吗?这种方式也不可靠,由于activity可能会被用户退出,Broadcast Receiver转载 2017-05-04 13:25:03 · 5193 阅读 · 0 评论 -
Java内存泄露的理解与解决
依赖于引用判断的内存管理机制Java中对内存对象的访问,使用的是引用的方式。在Java代码中我们维护一个内存对象的引用变量,通过这个引用变量的值,我们可以访问到对应的内存地址中的内存对象空间。在Java程序中,这个引用变量本身既可以存放堆内存中,又可以放在代码栈的内存中(与基本数据类型相同)。GC线程会从代码栈中的引用变量开始跟踪,从而判定哪些内存是正在使用的。如果GC线程通过这种方式,无转载 2017-05-25 23:24:39 · 320 阅读 · 0 评论 -
java中的基本数据类型存放位置
基本数据类型是放在栈中还是放在堆中,这取决于基本类型声明的位置。 一:在方法中声明的变量,即该变量是局部变量,每当程序调用方法时,系统都会为该方法建立一个方法栈,其所在方法中声明的变量就放在方法栈中,当方法结束系统会释放方法栈,其对应在该方法中声明的变量随着栈的销毁而结束,这就局部变量只能在方法中有效的原因 在方法中声明的变量可以是基本类型的变量,也可以是引用类型的变量。转载 2017-05-25 22:56:39 · 2774 阅读 · 1 评论 -
关于android 0进程1服务的意思
一直不了解service和线程的区别,网上都说生命周期不一样,我在application里开的线程生命周期就跟app一致了,和在service里开线程效果一样啊,作为四大组件之一的service就这么水吗?其实不然,有时我们可能需要app被杀死但不希望某些任务被中断,如下载文件,下面我们进行分析。(这里谈的是本地服务,远程服务运行在不同进程就不多说了)有时我们查看有什么程序正在运行的时候会看到如下...转载 2018-02-08 17:20:14 · 707 阅读 · 0 评论 -
ACTIVITY任务栈
FLAG_ACTIVITY_NEW_TASK 设置此状态,记住以下原则,首先会查找是否存在和被启动的Activity具有相同的亲和性的任务栈(即taskAffinity,注意同一个应用程序中的activity的亲和性在没有修改的情况下是一样的,所以下面的a情况会在同一个栈中),如果有,刚直接把这个栈整体移动到前台,并保持栈中的状态不变,即栈中的activity顺序不变,如果没有,则新建一个栈来...原创 2018-03-14 09:57:35 · 317 阅读 · 0 评论 -
多选框显示并存储 通过Math.pow(2,i)函数
如图需要做一个多选框显示并存储。一开始采用了 字符串+","去存储和读取。通过split方法遍历出是否选中。后来。采用了把所有的条目循环累加进行读取操作, Math.pow(2,i) 函数,保证唯一性。并优化了代码。代码如下:/** * 保存文件类型的配置数 * @param booleen */public void setOption(boolean[] booleen){ ...原创 2018-03-30 10:19:16 · 1491 阅读 · 0 评论 -
HashSet与TreeSet对重复元素的判断不同之处
HashSet 的实现其实非常简单,它只是封装了一个 HashMap 对象来存储所有的集合元素,所有放入 HashSet 中的集合元素实际上由 HashMap 的 key 来保存,而 HashMap 的 value 则存储了一个 PRESENT,它是一个静态的 Object 对象。HashSet 的绝大部分方法都是通过调用 HashMap 的方法来实现的,因此 HashSet 和 HashMap ...转载 2018-06-07 12:03:28 · 459 阅读 · 0 评论 -
Java算法给定一个整数数组,找出其中两个数相加等于目标值
给定一个整数数组,找出其中两个数相加等于目标值 例如:给定数组及目标值 nums = [2,7,11,15] ,target = 9 因为nums[0] + nums[1] = 2 + 7 = 9 返回[0,1]/** * 使用辅助空间(使用哈希表,时间复杂度是O(n),空间复杂度:O(n),n是数组大小) * @param nums * @param target...转载 2018-06-07 12:11:07 · 2077 阅读 · 0 评论 -
String 和 CharSequence 关系
String 是java中的字符串,它继承于CharSequence。String类所包含的API接口非常多。为了便于今后的使用,我对String的API进行了分类,并都给出的演示程序。String 和 CharSequence 关系String 继承于CharSequence,也就是说String也是CharSequence类型。CharSequence是一个接口,它只包括l转载 2016-09-02 14:00:54 · 450 阅读 · 0 评论