Android
文章平均质量分 77
疯人院的院长大人
喜欢学习研究。喜欢解各种疑难杂症,喜欢主动。研究领域:Android开发,性能优化,逆向开发,移动攻防。
展开
-
移动攻防-检测非标准调用和如何防止反射
反射一度被认为是java开发者得福音而被广泛应用,但是在Android9之后,Google系统对开发者通过反射进行非官方得api接口调用做了限制。也就是说,一些隐藏的接口开发者无法正常访问了。我们可以在Androi系统的源码中看到系统那些地方做了api隐藏,以Android10为例,位于,当然,谷歌此举旨在提升软件的用户体验,降低崩溃,但是对于攻防者来说,关注点却不太一样。原创 2022-11-01 19:57:43 · 606 阅读 · 0 评论 -
Android应用安全指南-反逆向
由于其开源性质,Android 拥有广泛的追随者。虽然很受欢迎,但 android 也有不利的一面,即漏洞。Android 为应用程序开发人员提供了大多数移动平台所没有的显着优势。由于它是开源的, 因此开发人员和逆向工程师可以有效地研究 Android 开源项目 (AOSP) 中的源代码,并根据他们的要求对其进行调整。简而言之,逆向工程是工程师用来重新获取源代码以重建程序、构建与之类似的东西、发现应用程序中的缺陷或提高其安全性的一种技术。这些是可以帮助您保护Android。原创 2022-10-02 17:29:34 · 1156 阅读 · 0 评论 -
Android App性能优化指南
在不同的 android 应用程序组件之间提供清晰的界限是至关重要的。当你需要添加、删除或测试对应用程序其他模块的修改时,它会派上用场。最后,值得注意的是,全球已经数字化,连接设备的数量正在以惊人的速度增长。与此同时,用户的注意力范围正在减少。保留它们的唯一方法是让你的移动应用程序高效运行。此博客描述了提高 Android 应用程序性能的方法。这些策略结合起来可以显着减少 CPU 执行的工作量和应用程序消耗的内存量。原创 2022-10-02 15:50:04 · 708 阅读 · 0 评论 -
Android init.rc语言全解析
读懂init语言并不难,难的是有人愿意去做这个事情然后分享出来,如果不是接触到这块的知识,没有谁会专门研究这个,这也是为什么我写第一篇initrc文章到现在过去了7年多了一直没更新的原因,经常有小伙伴私信我希望我写一篇关于init文件解读的文章,或者是想请教下如何在custom的rc文件中加入自己的服务,当然有心的人肯定自己已经整明白了,因为所有的知识都是现存的,用心的小伙伴都能在网上找到。还没整明白的小伙伴也没关系,看完这篇文章你也可以摸索着自己做实现了。原创 2022-09-28 13:31:01 · 774 阅读 · 0 评论 -
Android系统启动流程全解析--你知道Android系统启动都干了啥吗
只要是Android系统,运行的第一个程序一定是引导程序,可以这么说,所有的unix系统都有引导加载程序。这个引导加载程序的作用是在在加载 Linux 内核之前进行低级(底层)系统初始化。Android系统启动的第一阶段是将recovery镜像加载到系统flash里(就是我们的固定内存Rom),这也是引导程序的主要功能。原创 2022-09-27 18:54:33 · 5145 阅读 · 0 评论 -
性能优化专题(二)安装包原理解析及瘦身指南
应用瘦身并不是安卓开发中很重要的一块,他不像线程和内存的优化,会严重影响用户体验。但是这并不是说他不重要,而是他有特定的需求场景,而这个是和产品开发阶段强相关的。应用开发早期,本身代码量和资源数量并不多,应用优化带来的效果也很轻微,这个阶段专注应用的优化并不会有多大收益。但是在应用发布阶段,应用体积变大,为了让交付更顺利(比如上架国内外市场或交付给客户),就会开始注重应用体积的优化,特别是对于应用市场的上架来说,更小的体积队获得自然流量以及提高用户的下载率更有帮助(主要是对于非wifi用户,特别是流量吃紧的原创 2022-04-18 18:10:37 · 290 阅读 · 0 评论 -
性能优化专题(一)无痕埋点-动态插桩原理解析和基本实现
标题只是为了大家更方便地找到我这个系列的文章,同时也方便我自己后续整理文章。无痕埋点也叫无埋点,这个和性能优化有多大关系呢?无埋点顾名思义就是不需要开发人员编写埋点代码,通常情况下,大部分公司并不会将埋点作为工时纳入开发计划,但是随着应用业务变复杂,用户行为的分析变得越来越重要,如果还是古老的挨个定义显得很死板,最主要的还是加重了开发人员的负担,所以我更愿意说,这个性能优化是基于开发的性能优化。那么,在学习无痕埋点前,我们需要知道无痕埋点能帮我们解决什么问题?通过代码手动埋点比较原始,出错概率较高。原创 2022-04-18 14:46:53 · 2464 阅读 · 0 评论 -
Android Studio误删了未备份的文件如何找回
问题出现在合并代码的时候,用Android studio不小心删除了一个很重要的文件,重点是当时并没有发觉,等到我发现的时候已经过去了挺长时间了。当时第一反应是按Ctrl+C撤销,结果发现撤销到底后我要的文件还没有出来,这个时候我开始慌了。我知道有恢复软件可以进行恢复,于是我立马下了一个Disk Genis,然后全盘扫描,期待奇迹发生。几分钟的等待之后,我迫不及待点进去看结果,然后,我有点绝望了,还是没出来。绝处逢生就在我要放弃的时候我上网无意间搜索到通过Android Studio的历史记录工具可原创 2022-04-01 15:07:14 · 3780 阅读 · 1 评论 -
AndroidStudio一键国际化方案
预研国际化对于只做国内市场的小伙伴来说基本没有太多感觉,但是对于做国外市场特别是谷歌市场的朋友来说却是需要重视的一个知识点。因为海外市场面对的全球的客户,而如果人工翻译势必很费时费力而且低效,这时候我们需要程序化来实现这个体力活。有几种方案,一种是自己写一个程序或者脚本,接入翻译的api,比如google或者有道实现自动化查询转换。还有一种是拿现成的,这显然不知我有这个需求,大部分大众需求网上有热心朋友会做好,于是我选择第二种。选择国际化插件如果我们在百度或者google上搜索Android Stu原创 2022-03-05 14:18:56 · 5176 阅读 · 0 评论 -
Android BugReport异常快速排查手册
阅读错误报告无论是任何类型的开发工作,出错都在所难免,而错误报告对于找出和解决问题至关重要。Android 的所有版本都支持通过 Android 调试桥 (adb) 获取错误报告;Android 4.2 及更高版本支持一个旨在获取错误报告以及通过电子邮件、云端硬盘等分享报告的开发者选项。Android 错误报告中包含文本 (.txt) 格式的 dumpsys、dumpstate 和 logcat 数据,以便您轻松搜索特定内容。以下各部分详细说明了错误报告的组成部分、介绍了常见问题,并提供了关于查找与这些原创 2021-11-01 18:09:24 · 10798 阅读 · 2 评论 -
小团队如何快速开发交付商业级安卓项目
本文介绍的是一个小的安卓项目开发的全流程要用到的工具,方法和经验。适用于技术外包,协同合作,小项目开发管理。项目开发中会遇到很多问题,小项目是大项目的缩影,任何事物都是从0-1再慢慢增长,没有一开始就很完善的产品,而从0-1却是最关键的。原创 2021-10-22 16:44:46 · 1562 阅读 · 1 评论 -
annot keep settings in the secure 或WRITE_SETTINGS not granted
最近一个项目,Rom定制方提供了一个写设置的方法以便于和framework通讯,用了Settings.System;我们知道,有一些公共的数据是存放在存放在系统数据库SettingsProvider的System表中的,使用方式是这样的:写入数据Settings.System.putStringForUser(ContentResolver cr, String name, int value, int userHandle)读取数据Settings.System.getStringForUse原创 2021-10-10 11:13:17 · 775 阅读 · 0 评论 -
新能源车存在的意义是什么?其实就是另一个安卓模式
国产智能车的出路在于开源,就像当年的小米之于苹果。今年爆炒了新能源,回过头一想,新能源对于我们的日常真起不到颠覆性作用。汽车的性能瓶颈在n年前就出现了,电脑手机等应用场景领域的性能瓶颈到现在都只是初见端倪,加之不像手机整天摸在手里,也不是整天跑高速。那就是拼内饰和功能嘛,联想一下国产手机的崛起,凭借浙江义乌和深圳华强北,什么奇形怪状的手机做不出来。你可能会说,山寨机嘛,样子花哨,使用卡顿,售后困难。话是这么说没错,但是那时候买山寨机的基本没人摸过水果机,都体验不好人家的好怎么会知道自己的烂呢?反正我当原创 2021-09-24 09:46:11 · 248 阅读 · 0 评论 -
如何创作一款商业级的安卓独立应用
由于分工越来越细,很多Android开发者并不知道如何做一款接近商业化的应用。这不只是初级开发者,很多中级开发者也未必能设计出像样的产品,原因很简单:让开发者去做一款独立产品就相当于让开发者一个人做了开发,美工,Ue/Ux设计师,项目经理,产品经理,后台开发工程师。这还只是分工上的区别,如果一个开发人员一直没有做过几个生命周期较长的产品(超过两年),他甚至都无法理解一个商业化的产品应该长成啥样;于是这篇文章就诞生了,这篇文章可能不一定能够让你立马开发出一套商业化的应用,但是他绝对能让困扰在上述问题中的小伙原创 2021-01-08 17:16:15 · 1069 阅读 · 2 评论 -
价值百万的流量思维
分享一个自己的顿悟,不一定正确,有点长,可以当小说看。本文系原创,如果想要转载请提前获得本人同意,否则追究法律责任。互联网圈有两种玩法一种流量一种产品,虽然同属于互联网但两种玩法截然不同,产生的效果也大相径庭。大部分互联网人知道产品的玩法,当年最火的人人都是产品经理就是这种思维趋势下的产物,概括来说就是做一个用户喜欢的产品,不断的打磨不断的精进然后成为爆款,这也是前几年的主要玩法。它的优点是可持续性缺点是沉没成本太大短时间看不到收益。而流量思维的玩法更像是一种投机取巧的方法所以一般人不会注意但它原创 2021-01-03 15:39:48 · 622 阅读 · 0 评论 -
Android支持复杂对象的自定义表格控件
在我看来,只有在一些定制化的地方需要做自定义View,如果你在Github上搜索自定义View或者XX控件你会找到很多不错的开源组件,而实际上,这些开源组件里面有很多功能,而这些功能不一定是开发者当时所需要的,如果贸然引入进去必然增加维护难度。最合适自己的才是最好的,这句话不仅仅用在开源组件合适,用在选择书上也合适,甚至可以用在任何选择场景上;不多不少,不增不减,刚刚合适,这一直是我的生活理念也是我的开发理念;做表格控件的初衷是为了防止业务过度交叉,项目中需要做一个可以很多地方用到的表格功能,这个表格可原创 2020-09-09 16:59:29 · 1501 阅读 · 0 评论 -
Android网络通讯原理解析
虽然标题写的是《Android网络通讯原理解析》,实际上,发不管是安卓还是linux系统或者是塞班,Windows,Mac OS还是其他各种各样的操作系统,其内部的网络通讯原理基本一致;有些小伙伴想知道安卓两个应用之间胡这是从安卓应用到服务主机之间数据传输是怎么实现的,但是搜到的大部分讲的比较抽象,因此我决定写一篇文章把这这些知识点串联起来,让大家有一个更加全面的认识;我们先来看一个场景吧;我写了一个Http请求图片的应用,然后我把这个应用安装在了我的小米手机上。我打开应用,程序从后台服务器请求到了图原创 2020-08-27 17:48:10 · 2161 阅读 · 0 评论 -
Android自定义UI组件-带进度显示的按钮ProgressButtom
场景毛教员有一句话我非常喜欢,从实践中来到实践中去。写这篇文章的原因是我需要做一个带进度条的按钮,而需要一个带进度条的按钮的原因是我要在对话框中做一个配置页面,而配置页面本来空间就已经很多了,为了把排版尽可能的简洁一些,我需要压缩里面的控件数量以提升使用体验;而配置里面有一个按钮点击后执行了个耗时操作,我需要等待这个操作返回才行让用户继续,但是如果用户点击完就像卡死了一样体验肯定是很差的,在对话框上面在加一层进度条也不太好,自然就想到按下按钮的时候在按钮上提示用户进度;选型思考我写代码喜欢尽可能简单,原创 2020-08-24 14:33:08 · 1156 阅读 · 1 评论 -
在程序中实现程序的安装和卸载
当程序需要升级及维护,都需要用到程序的更新。下面的小代码可以实现程序的安装和更新。原理是使用Intent调用系统的安装和卸载程序。下面代码中的packageName可以在程序中用getPackageName()获取到。[code="java"]/** * 测试安装 */ public void testInstall(){ Uri uri = Uri.fromFile(n...原创 2013-11-06 20:55:17 · 454 阅读 · 0 评论 -
Eclipse 的Alt+/有问题或者不好用
Eclipse 的Alt+/有问题或者不好用 不知道有没有开发者和我一样,下过来到eclipse本来用的很好的,某一天Alt+/不好用了,我的情况是在android开发到时候布局文件里面自动提示到功能变成了自动补全,我很奇怪,前些天沙也没做,后来仔细想想总结除了一个原因,每次新建一个项目把以前到项目到一部分内容粘贴进去就有可能出现那样到问题。 记得这个问题困扰我好久了...2014-10-24 10:02:07 · 1680 阅读 · 0 评论 -
apk 静默安装
老大要我弄个自动更新,要用到静默安装,网上找到了些大拿的代码,我拿去改吧改吧,先贴出来: /** * 软件静默安装 * @param apkAbsolutePath apk文件所在路径 * @return 安装结果:获取到的result值<br> * * 如果安装成功的话是“ * pkg: /data/local/tmp/Calculat...2014-10-23 13:46:32 · 1501 阅读 · 0 评论 -
linux 下的eclipse支持GBK
因为网上下载的很多源码是GBK编码的,这样导致我们在看源码注释的时候看的是中文乱码,而当我们想要修改编码方式时,发现没有GBK这一选项。 是的,默认linux mint是不支持GBK的,所以我们需要安装GBK编码 安装方式:修改/var/lib/locales/supported.d/local文件,在文件中添加 zh_CN.GBK GBK zh_CN.GB2312 GB2312...2014-10-22 08:58:16 · 1537 阅读 · 0 评论 -
环信学习笔记(一)
小弟 从今天开始学习环信的sdk,主要是学习里面的设计思想,希望能通过本次学习,能有一个更深层次的认识;同时也希望能通过博客的方式,帮助到更多的人;序言 为了让我这个计划能持久的维持下去,我给自己拟定了一个一个计划,这样保证能有条不紊的进行; 序号优先级预计完成时间概要明细1...2015-11-12 14:59:52 · 1554 阅读 · 0 评论 -
Asmack使用帮助文档
本博文由larson纯手工打字,纯个人翻译,翻译的不好还请指正,文章主要是为了让其他研究asmack的人能更快使用asmack,不喜勿喷,请尊重劳动成果。 需求:你需要调用SmackAndroid.init(Context) (在 org.jivesoftware.smack包里面)来初始化Smack在Adnroid上的运行环境,否则的话Smack可能像预期那样起作用。 ...2014-10-19 19:22:33 · 1613 阅读 · 0 评论 -
asmack搜索添加好友
在做添加好友之间,必须要对xmpp的好友订阅有一定的了解,以前我不了解其中原理,盲目的做,以为添加到了各自的列表能够发消息就没事了,后来发现这样会导致很多问题,比如好友上下线无提醒,好友更新了vcard没有提示等一系列和好友相关的问题都出来了。 后来终于重视这个问题,查找相关资料,自行百度,发现很多资料都是只说了单边实现没有设计原理,事实上,那也不算真的实现了,现在我来说下原理和流程,...2015-10-28 15:06:21 · 1746 阅读 · 0 评论 -
asmack登录冲突(多端登录冲突)处理
功能:登录冲突; 效果:弹出对话框,您的账号在xxx设备登录,您已下载; 实现步骤:asmack给我们提拱了一整套连接错误方案,其中就包括了登录冲突;开始的时候,我还自己去写了一个,原理是上线的时候发送一个自定义的packet出去告诉登陆上的那个用户下线,后来发现这个方法行不通,因为另一端已经下线了,根本拿不到这条消息。 后来我想会不会在ConnectionLis...2015-10-20 18:08:57 · 1781 阅读 · 0 评论 -
asmack断线重连实现
在以前的asmack版本中,断线重连是需要我们自己做的,原理很简单,分两种情况,一种是断网了,另外一种就是掉线了。 1.没有网络的情况下。没有网络的情况下,如果想要在所有页面提示用户开启网络,一个一个页面写会很麻烦,其实我们可以写一个baseActivity,在这个里面做断网相关操作,其他的activity集成了这个类,那么就能在整个应用程序中弹出对话框,要想实现全局的对话框,使用这...2015-10-20 17:32:41 · 1720 阅读 · 0 评论 -
如何监听到asmack联系人资料变动
开发中的点滴,排版有点丑,博客也不常写,有点丑,别嫌弃。实在要嫌弃,网站有我照片,看完会心里平衡些。 场景:在开发一款xmpp的应用,需要获取好友资料变动并实时刷新。1.确定问题:获取好友资料变动;2.工具:spark和adt3.解决问题: 我先用spark开启调试模式登录,在spark端和im移动客户端同时上线之后,im端修改了个人vcard数据保存,在spark...2015-09-28 17:01:07 · 149 阅读 · 0 评论 -
Android 获取包名,版本信息
Android 获取包名,版本信息及VersionName名称 private String getAppInfo() { try { String pkName = this.getPackageName(); String versionName = this.getPackageManager().getPackageInfo( ...原创 2014-11-04 09:50:50 · 1725 阅读 · 0 评论 -
万能toString 工具
public String toString() { // TODO Auto-generated method stub Field[] fields=this.getClass().getDeclaredFields(); StringBuffer strBuf=new StringBuffer(); ...原创 2014-11-04 10:19:05 · 1642 阅读 · 0 评论 -
内存优化之内存泄漏
我们能通过这篇文章学到什么?我们这篇文章主要通过两点来讲:探讨关于内存泄露的原因; 1.1 JVM垃圾回收机制 1.2 GC Root实战找出内存泄漏并解决;什么是内存泄漏内存泄漏是指对象不再被应用程序使用,但是垃圾回收器却不能移除它们,因为它们正在被引用。为了方便大家理解,我用一个例子帮助大家理解垃圾回收机制;大家去过食堂吃饭吧,吃完饭后,需要我...原创 2018-06-02 18:06:32 · 4184 阅读 · 0 评论 -
安卓高阶之性能优化全解析(一)
Android性能优化这篇文章作为Android性能优化的引入,Android的性能优化一直是广大开发者头疼的问题,也是非常重要的一个知识点,这里面涉及到的知识比较多,不知道大家对性能优化了解多少,首先问一下大家,你所知道的性能优化有多少种?如果是很少关注性能这块的开发者或者初级程序员,可能会一脸懵逼,似曾相识却又回答不上来,稍微有点经验的开发者应该会很容易答出一部分:电量优化,网络优化,...原创 2018-06-01 17:19:49 · 2068 阅读 · 0 评论 -
Android ANR排查手册
大部分做安卓的小伙伴相信对于ANR一定不陌生,相比于发生应用程序崩溃,发生ANR更加让人头大,主要原因是崩溃发生的时候会在Logcat中打印出发生异常的位置,开发人员很容易就能定位到崩溃并解决,显然ANR没那么轻松;但是我们大可不必这么忧伤,因为绝大部分ANR都是很容易解决的,只是我们没找到方法而已;首先要搞定ANR就要对他有一个根本性的认识,和我们了解任何事物一样,只有抓住了事物之根本,才能在...原创 2019-04-29 18:55:09 · 14496 阅读 · 3 评论 -
android studio 使用代码混淆
对于一些安全性要求比较高的应用,需要使用代码混淆,android studio很好的提供了这个功能,使我们能够方便的进行代码混淆; 1,在build.grandle添加,其中规则写在proguard-rules.pro中,也可以自定义一个文件,将其代替,比如eclipse常用的 proguard-project.txtbuildTypes { release { s...2016-03-13 22:46:20 · 2391 阅读 · 0 评论 -
android图片选取与调用系统裁剪
话不多说,直接给出一个工具类,想要的拿去 package com.locinengine.utils;import java.io.File;import java.text.SimpleDateFormat;import java.util.Date;import android.annotation.SuppressLint;import android....2016-01-27 15:14:40 · 1741 阅读 · 0 评论 -
Url出现非法参数异常
访问网址出现:illegal character in scheme at index x 使用get方式请求数据,参数在url后。 开始以为是字符编码问题,当都用utf-8之后发现没用,然后有些手机不会报错,有些手机会; public static void getRemoteJsonContent(final Map<String, String>...2016-01-26 13:13:59 · 6286 阅读 · 0 评论 -
openfire在eclipse中的环境搭建和编译详解
因为项目需要去研究了openfire,刚开始按照视频教程开始弄得,不知为何在eclipse里面怎么也build不起来,终于弄好了,和大家交流下经验。 材料(准备工作) 1).Openfire源码,下载我就不说了,百度即可。下载过来后解压。2).Install4j,这个很重要,之前就是因为这个没有配置好导致失败的。因为openfire的编译是要依赖这个东西的,我们把这个东西...2014-11-19 21:31:24 · 1586 阅读 · 0 评论 -
This message is already in use.的解决办法
This message is already in use.的解决方法 在开发项目的时候遇到报错This message is already in use.然后我看了下是和handler发送Message相关的,于是我就在网上找解决办法。其实意思就是说,这个消息已经在消息队列了,而且正被使用,而如果往同一个队列发送相同的西哦奥西对象就会报错。这样,解决就很简单了,我们只需要判断...2014-11-06 14:38:33 · 6301 阅读 · 0 评论 -
notification自定义铃声
做项目的时候要用到notification的自定义铃声,我是这么写的messageNotification.sound = Uri.parse("android:resource://"+ getPackageName() + "/" + R.raw.msg); 关于铃声的设置有好多种方法:方法一: messageNotification.defaults |= No...2014-09-22 10:45:02 · 2685 阅读 · 0 评论 -
关于x86安卓虚拟机提示dev\kvm找不到问题的终极解决办法
dev\kvm not fond并不是每个人都会遇到,但是一旦遇到就会让人发狂,作者从泥坑里面摸爬滚打走了出来,以此奉献给大家最优解决方案;最新版本的Android studio(我这里是Android Studio3.2),在安装haxm时,走到最后面的时候因为Windows 的安全策略不让haxm安装,理由是没有正确签名;于是作者和Windows开启了斗智斗勇的艰辛历程;在a...原创 2018-06-19 15:19:33 · 4623 阅读 · 1 评论