lefo的菜鸡实录

又是一个android开发

前言

去年年底的时候,产品妹子拿着一部华为手机来找我们组,这部手机在安装应用的时候,会显示安装来源,同时,对包进行了扫描检测。但是有一个奇怪的现象是,同一款应用,安装过程不同。

  1. 从我们市场安装,则显示出市场名字,并提示建议从官方市场安装,用户必须勾选允许才能安装,不然只能取消或去华为商店下载。
  2. 从豌豆荚中安装,显示的是未知来源,没有提示从官方市场安装。
  3. 从360手机助手、应用宝安装显示出市场名字,提示通过安全检测。

这个安全引导在一定程度上能将我们的流量直接导入到官方市场下载。应用市场就是靠下载、安装的流量转化来赚钱的,而在安装的时候,ROM方就设置一些门槛,将量转化到自己的市场里。而且从上面的结果猜测,360和应用宝明显是走了公关渠道,而豌豆荚则是使用了黑科技。

阅读全文 »

需求

从API 19开始,也就是android 4.4 kitcat,android开始支持沉浸式状态栏。可以使状态栏看起来和我们的程序浑然一体,不再像之前那样突兀。几个月前,刚好做了个这方面的需求,记录一下踩了的坑。

一共两种类型的沉浸式,一种是将view直接伸到statusbar里去,另一种是直接给statusbar设置一个背景色。其中,有些需要将伸到statusbar里的页面,顶部还有一个类似titlebar的view,有交互,必须保证操作区域没有进入到状态栏中。设置背景色的需求则比较简单,直接换个纯色的背景色。

实现

一顿的搜索前辈们的各种技术文章之后发现,一切效果都是:不理想。可以参考知乎上的一个问答Android 5.0 如何实现将布局的内容延伸到状态栏,网上也找了一些开源类,大多修改状态栏颜色的和布局伸入状态栏的是分开的,没有在一起介绍的。而且发现有些方法中介绍的fitsSystemWindows属性的办法,对我来说简直就是噩梦,布局太复杂,试了好多遍都没成功。

阅读全文 »

前言

因为项目需要,有部分代码调用了Hide api,需要没有被阉割的android.jar。对于5.0以前的系统,这个jar可以从手机的framework.apk中提取,利用dex2jar变成jar,再覆盖SDK中的jar包中相同类名(sdk中有些类不是framework下的,framework只是一个模块,需要覆盖合并)。从5.0以上开始后,这个方法就不行了,必须自己生成jar包来使用。

官方说明

https://source.android.com/source/index.html
https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/

阅读全文 »

动态加载是早几年前的神秘话题,这几年随着技术的开放,动态加载也用的越来越多,做了一些收录,把我之前写的那些渣渣文章做个弥补,再补上另一篇渣渣。

这篇文章没有实质性内容,开源可参考的框架很多,算是做了一点点收录。反正也好久没写博客了,顺带随便写点啥。

常用的动态加载的方法

  • 代理方式,声明一个空壳activity,空壳activity中包含一个proxy activity对象,回调着proxy activity的生命周期。

  • 参考google的multidex的方案,反射BaseDexClassLoader拿到dexElements,将自己的dex文件添加到这个列表里。此方法有个问题就是CLASS_ISPREVERIFIED。

  • 这个方法是我从支付宝中反编译中看的,反射mPackageInfo对象,这个对象是一个LoadedApk,再用反射替换掉这个对象的mClassLoader字段为自己的PathClassLoader,具体介绍请看探究支付宝android客户端的动态加载

  • 初始化的代码要写在Application类的attachBaseContext方法中,不要写在onCreate里,ContentProvider:onCreate()调用优先于Application:onCreate(),所以我关于支付宝的那篇文章,介绍是有点错误的。

阅读全文 »

在浏览器中,如果我们想要看到一个网页的代码,只要按f12就可以轻松进行调试,但是在手机中,直接在手机浏览器上调试是肯定不行的。

为什么要在手机中调试网页

普通的网页,我们在chrome中就能模拟手机环境。但是在android的webview中,有些是需要和native代码进行交互的,比如说注入的js,有时候我们还会用些模板来动态生成html,所以只有在手机上真正展示出来的效果才是最终的网页代码,必须在手机上调试。

阅读全文 »

前言

为了推广自己的APP,增加用户黏性,会在浏览器中加入调用自己APP的链接,如果用户没有安装APP,则去下载。淘宝,支付宝,百度手机助手,都有这个功能。简单介绍一下方法

拦截http链接

不要用该方法,兼容性差,国内浏览器都不允许跳转

1
2
3
4
5
6
7
8
9
10
<activity android:name=”.MyActivity”>
<intent-filter>
<action android:name=”android.intent.action.VIEW” />
<category android:name=”android.intent.category.DEFAULT” />
<category android:name=”android.intent.category.BROWSABLE” />
<!-- 关键所在,匹配相应域名和 url 模式 -->
<data android:scheme=”http” android:host=”www.xxx.com”
android:pathPattern=”/xx/.*” />
</intent-filter>
</activity>

其原理就是,对指定的http链接进行拦截,从而达到跳转目的。这种方式还有一点恶心的地方就是会弹出一个弹窗让你选择是用浏览器还是APP打开该连接,如果你选择浏览器并勾选不再询问,如果下次你的URL没有改变,那你就悲剧了。。。

阅读全文 »

背景

过时,请使用github action

用hexo搭建BLOG,悲催的就是每次换台电脑就得搭一次环境,之前在网上也看到过有自动发布的教程,一直没有搞。最近网上又翻了一下,发现用travis ci不需要拥有自己的主机(有提供服务的平台),相对来说比较节省折腾,整理一下发出来。

要求

  • github pages,用于搭建BLOG,不介绍。
  • travis ci,自己百度一下补脑,可以理解为就是一个node.js的虚拟机环境。https://travis-ci.org/提供了travis-ci的服务,可以指定构建github上的代码。
  • 本地有hexo环境
  • linux或者MAC工作环境
阅读全文 »

引言

项目中需要将科大讯飞生成的录音传递到服务器上,因为amr格式的文件大小最小,而讯飞生成的文件是pcm格式的,所以需要将pcm转换成amr格式。在网上找了半天资料,发现android系统的源码中包含有一个android.media.AmrInputStream类,其内部分装了将pcm转换为amr的方法。

用法

首先将AmrInputStream复制到工程下,注意包名也不要改动,因为该类调用的是libmedia.so的native方法。

只要将原来的pcm文件用AmrInputStreamread后生成的字节写入新文件就成了amr格式的了。

起初我就是这样试的,结果生成的文件一直不能播放,我以为是采样率的问题,后来试了几个参数都不行。

各种google,百度,终于找到了原因,原来这个只能转内容,而amr文件还需要一个文件头。其文件头为六个字节,分别是0x23 0x21 0x41 0x4D 0x52 0x0A,下面是我写的一个工具类

阅读全文 »

简介

过时过时过时!!现在用gradle

最近有小伙伴问ant打包的事,google现在又在推广它的gradle构建工具,但是,目前有许多朋友还是用的ant,而且,在SDK多次更新之后,之前写好的ant文件不适用了,典型的例子就是apkbuilder命令。那么,怎么办呢??

好多人在网上搜索写好的打包脚本,并费劲心机的寻找工程依赖的打包方法,其实,android的SDK已经给我们提供了该build.xml文件了,就在/tools/ant/下面,这个脚本引用了tools/lib下的ant-task.jar,封装了好多target,我这里就说说怎么使用该脚本。

生成ant脚本

  • 在sdk/tools目录下执行下面的命令,注意将命令里面的目录改成你的工程的目录

    1
    android update project -p /dir/to/ur/project 
  • 如果你的工程没问题,就会在目录下生成2个文件,build.xmllocal.properties,打开local.properties,可看到其实是一个环境配置

  • 在工程目录新建ant.properties,将下面的配置信息添加到该文件中,注意将keystore的信息改成你的

    1
    2
    3
    4
    key.store=/home/android/android/build-res/safetrip.releasekey
    key.alias=android
    key.store.password=password
    key.alias.password=password
  • 打包,在工程下使用命令ant release,或者在eclipse中用ant运行

阅读全文 »

在早期的支付宝android客户端中,也有插件化的功能。大概的做法就是,自定义所有的UI控件,再通过XML文件,仿安卓原生XML的布局文件来搭建布局,再通过自定义的表达式解析器,利用JAVA的反射特性来给具体的控件添加不同的功能。这样也达到了插件化。

之前写过一篇文章,说的是支付宝的插件化。其实这篇文章很老了,现在的支付宝早已不是这种做法。最近几天忙里偷闲,反编译了一下支付宝的插件化。

在下资历不高,简单分享一下,大牛看到也不要喷我,在下也是在探索学习中,欢迎交流!

工具:

工欲善其事,必先利其器。因为平时拆包少,对某些好工具也了解不多,基本用了手工的方法来处理的。大家可以用什么APK改之理之类的工具。

  • apktool:这个大家都知道,反编译利器,我下的是apktool_2.0.0b9版本
  • dex2jar:不是必须,但看smali代码太累,用这个工具好受一些
  • jd-gui:不解释
  • Replace Studio:文本搜索工具,可以搜索某文件夹下的文件是否有某文本,我一直用这个,不知道大家有没有其它好工具推荐。
  • notepad++:如果你用记事本也可以
  • android环境:这个必须,你看完它的代码了,你起码得自己写的试试吧
阅读全文 »
0%