
Android 开发
Omni-Space
专注Android, Mobile Security and AI
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【译】Easily Build Android APKs on Device in Termux
您是否曾想在Android上构建自己的Android应用程序? 你自己的应用程序,APK! 您可以通过互联网分发的东西,可以在全球的Android智能手机上使用。 您是否敢于尝试花一些时间学习新的东西?此源代码存储库仅用于此目的。 源代码是用可理解的人类语言编写软件的方式,以便应用程序编译成机器代码,然后在设备上作为程序运行。 此集合中的应用程序已展示,因为它们已经过测试和通过。 它们已成功构...翻译 2018-10-27 15:50:22 · 1435 阅读 · 0 评论 -
Android热修复技术原理详解(最新最全版本)
本文框架什么是热修复?热修复框架分类技术原理及特点Tinker框架解析各框架对比图总结 通过阅读本文,你会对热修复技术有更深的认知,本文会列出各类框架的优缺点以及技术原理,文章末尾简单描述一下Tinker的框架结构。一、什么是热修复?正常开发流程热修复开发流程热修复优势修复什么?二、热修复框架分类现状:百花齐放百家争鸣简单分类更合理的分类三、技术原理及特点3.1 阿里Dexposed -- na...转载 2018-04-06 12:28:34 · 832 阅读 · 0 评论 -
AOP面向切面编程在Android中的使用
GitHub地址(欢迎下载完整Demo)https://github.com/ganchuanpu/AOPDemo项目需求描述我想类似于这样的个人中心的界面,大家都不会陌生吧。那几个有箭头的地方都是可以点击进行页面跳转的,但是需要先判断用户是否登录,如果已经登录,则正常跳转,如果没有登录,则跳转到登录页面先登录,但凡是有注册,登录的APP,这样的操作,大家应该都很熟悉吧。一般情况下,我们的逻辑是这...转载 2018-04-06 11:32:32 · 605 阅读 · 0 评论 -
Fragment生命周期详解
Fragment依附Activity而存在,本文通过两个TextView切换两个Fragment来观察Activity和两个Fragment在不同操作下各执行哪些方法,从而对其生命周期有更加深刻的了解。通过打印log进行分析。本文要点:Fragment的动态加载,和切换。Fragment和Activity的生命周期分析。注:文中:使用ButterKnife,免去findViewById。LogUt...转载 2018-04-06 11:24:16 · 219 阅读 · 0 评论 -
一种 Android 应用内全局获取 Context 实例的装置
哥白尼 · 罗斯福 · 马丁路德 · 李开复 · 嫁衣曾经说过Where there is an Android App, there is an Application context.没毛病,扎心了。App 运行的时候,肯定是存在至少一个 Application 实例的。同时,Context 我们再熟悉不过了,写代码的时候经常需要使用到 Context 实例,它一般是通过构造方法传递进来,通过...转载 2018-04-04 13:07:39 · 1518 阅读 · 0 评论 -
Java->Android并发编程筑基篇
最近有点忙,又有其他的事情,所以一直没有开始写这篇,感觉很惭愧。上一章讲了太多的东西,其实每一个小细节都可以写成一长篇,这一章会尽量用精简的方式把坑填上。Java的线程状态想要学好并发,还是得知道线程的生命周期,先看一下线程的生命周期:在线程的运行周期中会有状态与锁有关,所以先要讲解线程的状态,才能继续讲锁。sleepsleep会让当前线程进入”睡眠”状态,把执行的机会让给其他线程。类似于迅雷下载...转载 2018-04-04 13:07:32 · 233 阅读 · 0 评论 -
Java->Android并发编程引气入门篇
Android的并发编程,即多线程开发,而Android的多线程开发模型也是源于Java中的多线程模型。所以本篇也会先讲一些Java中的多线程理念,再讲解具体涉及的类,最后深入Android中的并发场景和实践。并发什么是并发举个很简单的栗子,当你一边在撸撸撸,一边在看小视频,同时在做两件事,这就是并发。咳,年轻人节制啊。并发的好处提高资源利用率当一个任务并没有完全占用系统资源,就可以利用并发来提高...转载 2018-04-04 13:07:07 · 331 阅读 · 0 评论 -
Application ProvidedAar 完结篇
之前写过两篇providedAar系列的文章,见:Android application中使用provided aar并没有那么简单再谈Application ProvidedAar基本上已经完美的实现了Android Gradle Plugin [1.3.0,3.2.0+)版本com.android.application中使用provided aar的功能,支持代码和资源的引用,同时不将代码和...转载 2018-04-04 13:07:00 · 341 阅读 · 0 评论 -
再谈 Application ProvidedAar
前言去年年底的时候,写过一篇博客叫《Android-application中使用provided-aar并没有那么简单》。当时文章中介绍了android gradle plugin不同版本的实现方式,对android gradle plugin 2.2.0以下版本的实现,是采用使用gradle maven的api实现,利用gradle本地缓存,这种方式不但反射的地方非常多,而且不支持传递依赖,局限...转载 2018-04-04 13:06:54 · 454 阅读 · 0 评论 -
aapt2 生成资源 public flag 标记
前言之前写过一篇aapt2适配之资源id固定,该文章介绍了如何使用aapt2固定资源id,其实这篇文章是对该文章的一点补充,主要介绍如何在固定id的同时,将该资源进行导出,打上public标记,供其他资源进行引用。整个问题的解决方案断断续续差不多思考了一个来月,现将解决方法简单介绍一下。从aapt2资源id固定说起首先来回顾一下aapt2如何将资源id符号表导出,使用–emit-ids参数指定导出...转载 2018-04-04 13:06:44 · 1294 阅读 · 0 评论 -
Android application 中使用 provided aar 并没有那么简单
前言首先简单讲一下这个需求的背景,大部分场景下,是没有这个需求的,这个需求出现在插件化中,当一个android插件引用aar中的类的时候,并且这个插件是使用com.android.application 这个gradle插件进行打包的,但是这个类已经在宿主中或者其他插件中,其实就没有必要将这个重复类打包到插件中,因此只需要进行引用,不需要打包到插件中。引用是其中一个目的,保证混淆的正确性则是另一个...转载 2018-04-04 13:06:36 · 4200 阅读 · 0 评论 -
Mastering Android NDK Build System - Part 1: Techniques with ndk-build
This article is not a “Hello world!”-type tutorial for NDK. Although I will still provide a quick walk-through of the very basic knowledge of ndk-build, but it is not the focus of this article. Instea...转载 2018-03-27 16:18:47 · 613 阅读 · 0 评论 -
NDK 交叉编译常用变量
总结一发NDK交叉编译的套路工具说明addr2line 把程序地址转换为文件名和行号。在命令行中给它一个地址和一个可执行文件名,它就会使用这个可执行文件的调试信息指出在给出的地址上是哪个文件以及行号。ar 建立、修改、提取归档文件。归档文件是包含多个文件内容的一个大文件,其结构保证了可以恢复原始文件内容。as 主要用来编译GNU C编译器gcc输出的汇编文件,产生的目标文件由连接器ld连接。c++...转载 2018-04-03 12:36:49 · 453 阅读 · 0 评论 -
当 Android 开发者遇见 TensorFlow
前言当写下这篇文章的时候,其实我连TensorFlow怎么用都不会,所以这篇文章你们就当我放屁好了。我是一个Android开发者,且我不会python(别鄙视我),所以取名为《当Android开发者遇见TensorFlow》。文章并没有什么实质性内容,仅仅是为了敲开机器学习的大门。Java调用TensorFlow前面说了,本宝宝是一只不会python的宝宝,所以这篇文章不会涉及到任何python相...转载 2018-04-02 14:31:55 · 3439 阅读 · 0 评论 -
aapt2 适配之资源 id 固定
前言资源id的固定在热修复和插件化中极其重要。在热修复中,构建patch时,需要保持patch包的资源id和基线包的资源id一致;在插件化中,如果插件需要引用宿主的资源,则需要将宿主的资源id进行固定,因此,资源id的固定在这两种场景下是尤为重要的。而在Android Gradle Plugin 3.0.0中,默认开启了aapt2,原先aapt的资源固定方式public.xml也将失效,必须寻找一...转载 2018-04-02 14:16:06 · 3245 阅读 · 0 评论 -
Android 性能优化 之谈谈Java内存区域
最近一年副业主要在学习投资和技能学习,把以前学习内存分析的一些笔记总结发出来,写了很多笔记总结都没有写完就又忙着了,最近再次总结复习学习一遍,还有提醒各位同学一定要学会投资。。 了解Android 内存管理,就有必要了解Java GC机制,必须要理解JVM 内存区域,这里我们主要从概念上介绍Java虚拟机内存的各个区域。 Android 应用运行时大部分时间都用于处理内存数据,虽然很多开发...转载 2018-04-06 12:33:25 · 225 阅读 · 0 评论 -
Hook技术--Activity的启动过程的拦截
1、寻找Hook点的原则Android中主要是依靠分析系统源码类来做到的,首先我们得找到被Hook的对象,我称之为Hook点;什么样的对象比较好Hook呢?自然是容易找到的对象。什么样的对象容易找到?静态变量和单例;在一个进程之内,静态变量和单例变量是相对不容易发生变化的,因此非常容易定位,而普通的对象则要么无法标志,要么容易改变。我们根据这个原则找到所谓的Hook点。2、寻找Hook点通常点击一...转载 2018-04-06 12:38:01 · 356 阅读 · 0 评论 -
Android Apk增量更新
前言有关APK更新的技术比较多,例如:增量更新、插件式开发、热修复、RN、静默安装。下面简单介绍一下: 什么是增量更新? 增量更新就是原有app的基础上只更新发生变化的地方,其余保持原样。与原来每次更新都要下载完整apk包的做法相比,这样做的好处显而易见:每次变化的地方总是比较少,因此更新包的体积就会小很多。 增量更新的流程 1.APP检测最新版本:把当前版本告诉服务端,服务端进行判断。如果有...转载 2018-04-06 15:20:30 · 495 阅读 · 0 评论 -
如何手动完成一次APK打包?----APK编译全过程
身为一个Android工程师,你是否有考虑过一个Android项目工程如何经过编译压缩变成一个APK的呢?你又是否编写过打包工具完成多渠道打包呢?下面我们来解密如何完成一个APK的打包。1、使用Android SDK提供的aapt.exe生成R.java类文件2、使用Android SDK提供的aidl.exe把.aidl转成.java文件(如果没有aidl,则跳过这一步)3、...转载 2018-10-01 11:27:10 · 1268 阅读 · 0 评论 -
手动命令行编译APK
平时开发为了提高效率,我们都喜欢使用集成开发工具,如Android Studios、Eclipse 等等。效率是提高了,但往往会忽略一些基本原理。现在我们抛开这些工具,自己通过打包命令,手动编译APK。APK解压不知道大家有没有了解,APK其实是一个zip格式文件。我们将一个app.apk 后缀名改成app.zip,然后用unzip 解压它。如图所示:app.zip.jpg解...转载 2018-10-01 11:23:11 · 3694 阅读 · 0 评论 -
Building Android App Without an IDE
UPDATE 2018-03-12: “android create project” command is removed from newer sdk tools (since 25.3.0). But you still can download older sdk from these links:http://dl-ssl.google.com/android/repository/...转载 2018-09-12 14:42:18 · 384 阅读 · 0 评论 -
长连接/websocket/SSE等主流服务器推送技术比较
最近做的某个项目有个需求,需要实时提醒client端有线上订单消息。所以保持客户端和服务器端的信息同步是关键要素,对此我们了解了可实现的方式。本文将介绍web常用的几种方式,希望给需要服务器端推送消息的同学在选型上有一点启发。一、推送技术常用的集中实现的实现方式1.1 短连接轮询:前端用定时器,每间隔一段时间发送请求来获取数据是否更新,这种方式可兼容ie和支持高级浏览器。通常采取setInterv...转载 2018-05-20 17:14:49 · 8145 阅读 · 2 评论 -
Android工程模块化平台的设计
本文的主题是基于项目模块化来说的,模块化其实跟项目重构很像,只是侧重点不同,分别是:删除、组织、降级、解耦。接下来将跟大家分享我是如何理解这四大块的。模块化重构删除:删除不必要的文件,尽可能减小工程体积。这里有一组数据,是饿了么一款 APP 在模块化前后一些文件的数量。可以看到,.java文件从1677个减少到了1543个。其实这不是重点,重点是下面的drawable,这里drawable只包含图...转载 2018-05-20 17:15:11 · 734 阅读 · 0 评论 -
Android开源框架源码鉴赏:Okhttp
文章目录一 请求与响应流程1.1 请求的封装1.2 请求的发送1.3 请求的调度二 拦截器2.1 RetryAndFollowUpInterceptor2.2 BridgeInterceptor2.3 CacheInterceptor2.4 ConnectInterceptor2.5 CallServerInterceptor三 连接机制3.1 建立连接3.2 连接...转载 2018-04-08 04:00:51 · 269 阅读 · 0 评论 -
Android开源框架源码鉴赏:Fresco
文章目录一 图片加载流程1.1 初始化Fresco1.2 获取DataSource1.3 绑定DraweeController与DraweeHierarchy1.4 从内存缓存/磁盘缓存/网络获取图片,并设置到对应的Drawable层二 DraweeController与DraweeHierarchy2.1 图层的层级构造2.2 图层的构建流程三 Producer与...转载 2018-04-08 04:00:54 · 282 阅读 · 0 评论 -
Android开源框架源码鉴赏:VirtualAPK
文章目录一 VirtualAPK的初始化流程二 VirtualAPK的的加载流程三 VirtualAPK启动组件的流程3.1 Activity3.2 Service3.3 Broadcast Receiver3.4 Content Provider更多Android开源框架源码分析文章请参见Android open framwork analysis。从2012年开...转载 2018-04-08 04:00:31 · 611 阅读 · 0 评论 -
Android处理崩溃的一些实践
对于任何程序来说,崩溃都是一件很难避免的事情,当然Android程序也不例外。在Android程序中,引起崩溃的多属于运行时异常或者错误,对于这些异常我们很难做到类似Checked Exception那样显式捕获,因而最终导致了程序崩溃。本文讲介绍一些如何处理崩溃的实践,比如收集崩溃的stacktrace,甚至如何避免出现程序已停止的对话框。如何收集崩溃信息收集崩溃信息,可以更好的修复问题,增强程...转载 2018-04-07 13:32:53 · 697 阅读 · 0 评论 -
浅析Android插件化
前言Android P preview版本中,已限制对@hide api的反射调用,具体的原理可以阅读Android P调用隐藏API限制原理这篇文章。由于最近团队分享也在分享插件化、热修复相关的东西。因此,写一篇文章,好好记录一下。准备知识反射、动态代理Android中的几个相关的ClassLoader,注意PathClassLoader在ART虚拟机上是可以加载未安装的APK的,Dalvik虚...转载 2018-04-07 13:16:48 · 487 阅读 · 0 评论 -
阿里SopHix热修复框架
2015年以来,Android开发领域里对热修复技术的讨论和分享越来越多,同时也出现了一些不同的解决方案,如QQ空间补丁方案、阿里AndFix以及微信Tinker(Bugly sdk也集成Tikner热更新)和阿里最新出品Sophix.它们在原理各有不同,适用场景各异。不过从技术上来说多数热修复框架是基于ClassLoader加载机制。下面是常见热修复框架的比较。 开通热修复服务读者可以打开Sop...转载 2018-04-07 11:31:04 · 1731 阅读 · 0 评论 -
Android热修复之 - 收集崩溃信息上传服务器
1.概述 大致的流程就是在用户崩溃的时候,我们获取崩溃信息、应用当前的信息和手机信息,然后把它保存到手机内存卡,再找我就直接找出来看看。后来衍生到上线后某些奇葩机型会有部分问题,所以不得不上传到服务器,后来发现居然可以配合热修复一步一步如此神奇,接下来我们来玩一玩,如何才能把用户的崩溃信息上传到服务器。大家也可以去找腾讯他有现成的:https://bugly.qq.com/v2/index 友盟...转载 2018-04-07 11:31:01 · 563 阅读 · 0 评论 -
Android热修复之 - 阿里开源的热补丁
1.1 基本介绍 我们先去github上面了解它https://github.com/alibaba/AndFix这里就有一个概念那就AndFix.apatch补丁用来修复方法,接下来我们看看到底是怎么实现的。 1.2 生成apatch包 假如我们收到了用户上传的崩溃信息,我们改完需要修复的Bug,这个时候就会有一个新的的apk我们就叫它为new.apk,原来的那个有Bug的apk你也...转载 2018-04-07 11:30:58 · 386 阅读 · 0 评论 -
Android友盟增量更新
1.增量升级的原理 增量更新的原理就是将本地apk与服务器端最新版本比对,并得到差异包。比如现在的版本是1.1.4,大小是7.2M,新版本是1.1.5.大小是7.3M。我们发现两个版本只有0.1M的差异,这样我们如果采用增量升级生成0.1M左右的差异包,这样用户只需要下载0.1M的差异包进行升级而不需要重新下载7.3M的新版本了。2.以往增量升级的实现 首先要有服务端来生成差异包,这一步使用bsd...转载 2018-04-07 11:30:54 · 463 阅读 · 0 评论 -
Android 在 NDK 层使用 OpenSSL 进行 RSA 加密
前言需求:需要在NDK层对一个Java层的字符串进行RSA加密,然后对加密的结果进行Base64返回到Java层方案:选择使用OpenSSL来实现。编译libssl.a和libcrypto.a静态库在github上找到了一个项目,可以直接将OpenSSL编译成Android可以使用的,项目地址为openssl_for_ios_and_android但是这个项目有点小问题,部分编译脚本需要做点改动,...转载 2018-04-02 14:10:48 · 2516 阅读 · 1 评论 -
美团外卖Android平台化架构演进实践
美团外卖自2013年创建以来,业务一直高速发展。目前美团外卖日完成订单量已突破1800万,成为美团点评最重要的业务之一。美团外卖的用户端入口,从单一的外卖独立App,拓展为外卖、美团、点评等多个App入口。美团外卖所承载的业务,也从单一的餐饮业务,发展到餐饮、超市、生鲜、果蔬、药品、鲜花、蛋糕、跑腿等十多个大品类业务。业务的快速发展对客户端架构不断提出新的挑战。平台化背景很早之前,外卖作为孵化中的...转载 2018-04-10 13:15:50 · 500 阅读 · 0 评论 -
大众点评App的短视频耗电量优化实战
前言美团点评测试团队负责App的质量保证工作,日常除了App的功能测试以外,还会重点关注App的性能测试。现在大家对手机越来越依赖,而上面各App的耗电量,直接影响了手机的待机时间,是用户非常关心的一点。本文主要通过一个典型案例,介绍App性能测试中的电量测试,并总结了我们由此引发的一些思考。一、案例分析短视频作为已被市场验证的新内容传播载体,能有效增加用户停留时长。大众点评App从9.3版本开始...转载 2018-04-09 13:02:32 · 454 阅读 · 0 评论 -
Android fragment源码全解析
Fragment 相信基本上每个android developer都用过,但是知晓其原理 用的好的还是不多,今天就从源码的角度上来带着大家分析一下Fragment的源码,对fragment有了更深层次的认识以后相信写出来的代码也会越来越好看。首先,我们来看第一个流程,fragment是怎么加载到界面上的,借着这个流程分析,能读完绝大多数fragment的源码。一般我们显示一转载 2016-05-24 08:49:05 · 1298 阅读 · 0 评论 -
Android Fragment 真正的完全解析(下)
转载请标明出处:http://blog.youkuaiyun.com/lmj623565791/article/details/37992017上篇博客中已经介绍了Fragment产生原因,以及一些基本的用法和各种API,如果你还不了解,请看:Android Fragment 真正的完全解析(上)。本篇将介绍上篇博客提到的:如何管理Fragment回退栈,Fragment如何与Activi转载 2016-05-24 06:00:37 · 633 阅读 · 0 评论 -
Android Fragment 真正的完全解析(上)
转载请标明出处:http://blog.youkuaiyun.com/lmj623565791/article/details/37970961自从Fragment出现,曾经有段时间,感觉大家谈什么都能跟Fragment谈上关系,做什么都要问下Fragment能实现不~~~哈哈,是不是有点过~~~本篇博客力求为大家说明Fragment如何产生,什么是Fragment,Fragment生命周期,转载 2016-05-24 05:59:23 · 571 阅读 · 0 评论 -
eclipse项目迁移到Android Studio
由于公司项目需要多包名APK的支持,所以把公司的项目从eclipse迁移到了Android Studio.以下是一些迁移经验:迁移准备Android Studio对代码检查比较严格,代码中如果存在一些重复ID和重复String,尽量都使用lint处理掉。Android Studio对于JAR包重复会导致编译失败,如果引用的项目中有相同的jar包,先清理掉,只保留一份。开转载 2016-03-27 14:17:07 · 516 阅读 · 0 评论 -
Android打包的那些事
使用gradle打包apk已经成为当前主流趋势,我也在这个过程中经历了各种需求,并不断结合gradle新的支持,一一改进。在此,把这些相关的东西记录,做一总结。1. 替换AndroidManifest中的占位符我想把其中的${app_label}替换为@string/app_name12345android{ defaultConf转载 2016-03-27 14:07:59 · 492 阅读 · 0 评论