【Android开发记录】
文章平均质量分 91
小巫技术博客
如果你想成功你不应该成为一个普通的可被随意替代的人你应该成为稀缺的不可替代的那类人
展开
-
Android编译优化:D8和R8
如果日常做Android开发的你不关注Google针对编译优化的话做的努力的话,会对D8和R8这两个名词会比较陌生。最近要升级工程的Gradle版本,正好涉及到开启D8和R8的问题,笔者就简单整理解释下这两者的作用和概念。一张图概括Android编译器进化图引自:https://proandroiddev.com/android-cpu-compilers-d8-r8-a3aa2bfbc109从Java开始,JVM通过在硬件上面添加一层抽象来适配不同的CPU架构来实现跨平台,通过javac编译器原创 2021-04-19 21:06:37 · 9988 阅读 · 8 评论 -
A002-开发工具介绍
关于Android的开发工具有很多,基本上都以在SDK中找到,下面我们逐个来看一下:首先我们使用的是Java语言进行Android应用的开发,那么Java的运行环境是少不了的了,我们需要在我们的PC中配置好jdk的环境变量,才能让我们的IDE跑起来。前面博文,小巫发表过一篇如何在macosx中配置java环境变量,如果大家不记得如何配置的话,可以参考那边博文,关于SDK的环境变量配置类似: Mac原创 2015-08-04 09:24:45 · 5253 阅读 · 0 评论 -
A020-列表容器之ListView
概述前面介绍了Android UI中的五大布局容器,本节课介绍实际项目当中经常会用到的组件-ListView,它也是一个布局容器,它的每一项就是我们的列表项,每一个列表项都是一块独立的布局,我们可把数据填充到每一个列表项中,这样来完成数据的展示。案例上面的效果图就是我们在app中常见的列表,这里只是简单的示例,更加复杂的ListView项效果根据产品需求来做。常见的功能需求有: - 根据视觉稿搭建原创 2015-10-07 21:32:58 · 3511 阅读 · 4 评论 -
A012-anim资源
anim资源这里特指Android中的View Animation(视图动画),然而视图动画分为: - Tween Animation(补间动画) - Frame Animation(逐帧动画)Tween Animation文件路径:res/anim/filename.xml 这样的一个资源指向一个Animation对象 资源引用: - Java中引用:R.anim.filename -原创 2015-09-17 00:11:38 · 3008 阅读 · 0 评论 -
A013-animator资源
上一节课介绍了关于anim资源的知识点,这节课来给大家介绍animator资源,它跟anim资源同样是res下在资源,它是另外一种动画资源,上节课讲的是View Animation,是Android3.0之前使用较多的动画方式,然而Android 3.0推出之后,也带给我们一种新的动画实现方式——Property Animation(属性动画),它们有什么不一样的地方?不同点: - View An原创 2015-09-19 17:51:14 · 2705 阅读 · 1 评论 -
A014-values资源
关于Android中使用的资源文件,前面陆陆续续也介绍了不少,这节课给大家介绍一下Android中使用到的“值资源”。可以看到上面的截图,在values文件夹下包含了很多个xml文件,每个文件代表一种值类型,里面定义了具体的类型资源。看一下在values下可以定义哪些资源文件:Bool在bools.xml中定义bool值语法:<?xml version="1.0" encoding="utf-8"?原创 2015-09-20 11:31:06 · 2659 阅读 · 0 评论 -
Android技巧2:登录注册模块解决方案
前言几乎每个app都会有登录注册的功能,可以看看笔者开发的『南方周末新闻阅读器』,登录、手机注册、忘记密码这些入口,这些功能在app中要如何来实现呢?这个模块看似很简单,但要做好就需要考虑很多细节,比如对用户的输入的容错,操作的提示文案的设定,登录成功保存用户信息等等。业务流程图业务逻辑描述上一节的流程图已经很清晰的展现了登录注册的流程,这里继续用文字说明一下: 1. 点击进入个人中心或者需要用户原创 2016-01-24 22:13:14 · 17569 阅读 · 4 评论 -
Android技巧1:启动屏+新功能左右导航
前言很长一段时间没写博客了,再不写点东西真说不过去,把工作上的一些有价值的东西整理出来分享,在当下还有点时效性,不然迟早会烂在肚子里的。还记得之前小巫有个开源计划是想实现一个星期开发app,现在把它拾起来,计划没有实行起来跟我那懒惰的身躯有关,任何伟大的事情都需要强大的执行力才能实现,慢一点没关系,能创造点东西就是值得的事情。本篇博客先介绍一个app最常见的特性,就是新功能属性介绍和启动屏,一般会怎原创 2016-01-23 21:24:17 · 4991 阅读 · 2 评论 -
App性能优化浅谈
前言前段时间给公司的小伙伴们进行了关于app性能优化的技术分享,这里我稍微整理一下也给大家分享一下,关于性能优化这个话题很大,涉及面可以很广,也可以很深入,本人能力有限,不会给大家讲特别难懂,特别底层的东西,都是我们开发能着手去做的点,大家都在讲性能优化,但对于项目经验不够丰富的朋友很难有一个概念,做优化的时候也会比较茫然,这里我就给大家指明方向。从何讲起?笔者在做产品开发的时候,也遇到性能瓶颈,测原创 2015-12-16 20:04:16 · 15261 阅读 · 6 评论 -
Android Studio系列-Activity单元测试
前言上一篇讲的是如何在Android Studio中进行Junit单元测试,这篇来简单记录一下如何针对Activity进行单元测试。新建一个项目我这里新建一个UnitTestDemo项目新建LoginActivity、IndexActivtypackage com.devilwwj.unittestdemo;import android.app.Activity;import android.co原创 2016-02-22 18:16:27 · 9330 阅读 · 1 评论 -
Android技术归档
各位小伙伴们,以后小巫的一些开源代码都会上传到github中,所以欢迎大家Follow https://github.com/devilWwj基于目前我主要的技术领域在Android上,以后关于Android的开源代码都会归档到 https://github.com/devilWwj/Android-Tech 主要是一些工作中比较实用的Demo和技术,比如crash日志统计、方法数越界解决方案原创 2016-04-01 10:13:48 · 2090 阅读 · 1 评论 -
A021-列表容器之GridView
概述GridView是Android的另一个列表容器,用法也跟ListView类似,它的布局是一个网格,一行可以有多个项,并且整个视图可以滚动,我们常见的应用有手机中的图库、launcher里面的应用列表、类似微信多张图片等,总的来说,ListView主要应用于单列多行的列表,然而GridView主要应用于多行多列的网状布局。案例上面的运行结果就是GridView的典型效果,每个item是一张固定大原创 2015-10-19 23:27:27 · 2929 阅读 · 2 评论 -
A022-列表容器之ExpandableListView
概述本节课介绍Android中可实现二级可展开收缩列表的ExpandableListView容器,笔者感觉它非常难用并且难理解,很多时候我们可能需要对控件进行扩展和定制,然而它不太方便扩展,它使用难点主要在数据结构上和对控件的事件监听,其他的实现方式类似ListView,下面会提供笔者在实际开发中使用到的案例。案例上面实现的效果可展开的二级列表,每个组项都可能有若干个子项,默认的E原创 2015-10-21 08:44:03 · 3617 阅读 · 3 评论 -
A003-Android开发环境搭建
上一节课给大家粗略的介绍了在实际开发当中会使用到的一些开发工具,本节课正式给大家介绍如何在我们的PC来大家开发环境,主要有两个步骤:配置JDK&SDK环境变量在Android Studio中配置project structure关于在windows下如何配置Android环境变量本节课不说,各位自己去百度,已经有很多总结得很好的文章,按照步骤来做就行。在Mac配置Android开发环境跟Win原创 2015-08-05 08:33:04 · 3431 阅读 · 5 评论 -
A004-AS开发HelloWorld
前面的一节课已经给大家介绍了如何搭建Android开发环境。 本节课就来给大家介绍如何使用Android studio来开发我们第一个Android应用程序。以后每一个项目都会上传到git@OSC中,大家可以down下来参考。 (http://git.oschina.net/devilwwj/AndroidDevelopCourse)原创 2015-08-06 00:14:58 · 2825 阅读 · 1 评论 -
Android开源计划-一周开发app
移动开发狂热者群开源计划题目一周开发app计划首批参与成员-小巫 -墨香 -梦痕 -边城刀客 -徐cc要求-每位认领者按照开源规范来做,代码规范和Android开发规范 -每位认领者必须拥有github账号,熟练使用git对代码进来管理 -每个人认领一个功能点或模块 -提出完善的解决方案并提供封装良好的库和demo开发工具&&语言Android StudioJava目的-减少An原创 2015-07-21 17:15:24 · 7377 阅读 · 26 评论 -
A008-drawable资源
关于drawable资源笔者之前有写过两篇文章: Android-自定义图像资源的使用(1) Android-自定义图像资源的使用(2) 这里笔者就不做过多的赘述,我们从实际开发的角度去理解这个知识点,如果单纯的只是学习知识点的使用是没有意义,我们要根据不同的需求和使用场景才能更好的把我们所学到的知识点运用在上面。要明确我们学习的目的就是为了应用,没有应用那么我们就只是在白费功夫,没有任何价值原创 2015-08-18 21:46:04 · 2570 阅读 · 0 评论 -
A011-raw资源
前面的笔者介绍过了assets资源,这节课介绍的是在res目录下的raw资源,路径为res/raw。处理assets资源外,我们程序中涉及到的资源文件都在res目录下,比如前面介绍过的drawable资源、menu资源,后面会陆续介绍其他资源类型。我们要如何获取raw下的资源,它跟assets目录的资源有什么异同,这个是我们Android开发者需要去关注的。 共同点 两者都不会被编译成二原创 2015-09-12 21:10:58 · 3124 阅读 · 0 评论 -
A018-布局之TableLayout
TableLayout表格布局,顾名思义像表格一样进行布局。我们通常配合TableRow一起使用,TableRow代表一行,有多少个TableRow就有多少行。eg:三行三列的布局<?xml version="1.0" encoding="utf-8"?><TableLayout xmlns:android="http://schemas.android.com/apk/res/android"原创 2015-10-04 20:08:04 · 2151 阅读 · 1 评论 -
A019-布局之GridLayout
GridLayout网格布局,是Android4.0之后的API才提供的,算是一个相对新的布局容器,它的用法也很简单,类似LinearLayout可以指定方向,也可以指定控件占用多少行或列的空间。举例我们看一个例子: 这里我做了一个登录的一个布局,如果不使用GridLayout来进行布局,可能会有多个布局的嵌套才能实现这样的布局,相对比较麻烦,使用了GridLayout我们可以更加灵活的去控制对齐原创 2015-10-04 21:15:35 · 2472 阅读 · 1 评论 -
A015-布局之LinearLayout
前面已经给大家介绍完Android中所涉及到的一些资源文件,这节课开始进入用户界面的介绍,主要会包括”布局”和”基础控件”,我会先从布局开始讲起,然后逐个给大家将如何在实际开发中使用相关的控件实现应用当中的UI。Android中的布局容器LinearLayout线性布局是Android中最基本的一种布局,它只有两种布局方向: - vertical(竖直方向) - horizontal(纵向)eg原创 2015-10-04 10:31:32 · 2031 阅读 · 1 评论 -
A016-布局之RelativeLayout
RelativeLayout相对布局,如果我们想在app中实现复杂的布局,缺了它肯定不行的,前面介绍的LinearLayout适用于顺序排列的布局,然而RelativeLayout则适用于各种排列方式。XML Attribute上面都是我们适用RelativeLayout布局时可以用到的属性,具体我就不一个个去介绍每一个属性的用法,我们只需要知道每个View都可以根据parent和其他View来进行原创 2015-10-04 12:00:48 · 2059 阅读 · 1 评论 -
A017-布局之FrameLayout
FrameLayout帧布局,是所有布局容器中最简单的一种,控件定义在FrameLayout中默认放置在左上角,定义在后面的控件会层叠在前面定义的控件之上,所以才会被称为帧布局。应用据我个人的开发经验,FramLayout主要用于比较简单的布局,最常见的一个应用场景就是”功能引导页”,就是在布局最外层遮罩一层半透明的视图,类似以下这种: 举例<?xml version="1.0" encoding原创 2015-10-04 17:00:50 · 2543 阅读 · 1 评论 -
Android热补丁动态修复实践
前言好几个月之前关于Android App热补丁修复火了一把,源于QQ空间团队的一篇文章安卓App热补丁动态修复技术介绍,然后各大厂的开源项目都出来了,本文的实践基于HotFix,也就是QQ空间技术团队那篇文章所应用的技术,笔者会把整个过程的细节和思路在文章中详说,研究这个的出发点也是为了能紧急修复app的bug,而不需要重复发包,不需要用户重新下载app就能把问题解决,个人觉得这个还是蛮有价值的,原创 2016-03-10 13:12:53 · 4423 阅读 · 8 评论 -
Android Crash之Java Crash分析
前言小巫最近由于工作原因面临技术转型,从一个App开发者转变为SDK开发者,这两者的区别是非常明显的,从用户角度来讲,app开发主要面向普通的用户需求,然而SDK开发面向的却是开发人员;从技术角度来讲,app开发更多的只是UI层面、基于数据流的技术实现,而SDK开发可能就要涉及更多复杂的需求、更多底层相关的技术实现。前面我在公众号分享了一篇文章:一个好的SDK或好的开放平台应该为开发者提供什么?,大原创 2016-05-28 00:10:21 · 9691 阅读 · 0 评论 -
Android Studio系列-单元测试入门篇
配置支持单元测试工程在Build Variant窗口内的Test Artifact中选择“Unit Tests“打开工程的build.gradle(Module:app)文件,添加JUnit4依赖,点击Gradle sync按钮。build.gradledependencies { compile fileTree(dir: 'libs', include: ['*.jar']) c原创 2016-02-22 17:52:49 · 3745 阅读 · 2 评论 -
Bugly升级SDK适配Android N
前言前几天有个用户在我们论坛反馈一个问题,说他们的app在Android N机型中升级失败了,看了一下反馈的问题,基本确定了是因为Android N收敛了访问共享文件权限,即在Android N中使用intent不允许跨package共享file://URI,如果在工程中设置targetSDK版本为Android N并且有通过Intent传递文件它会抛出FileUriExposedException原创 2016-09-25 21:51:54 · 4107 阅读 · 4 评论 -
SDK性能自测小技巧
SDK性能自测的一些小技巧,比如初始化耗时计算、内存消耗统计、流量统计、线程数统计等。原创 2016-10-24 09:21:24 · 5022 阅读 · 0 评论 -
Android混淆代码错误堆栈还原
前言相信做过app的同学对代码混淆应该不陌生吧,如果陌生就自行百度,这里不做普及。我们先思考一个问题,如果我们把代码混淆了,如果出错了怎么定位问题?答案非常简单,只要稍微实践下你就明白了,下面就是给你整理的对混淆代码错误堆栈还原的方法。如何混淆?Android Studio实现混淆很简单,只需要在build.gradle进行如下配置即可: buildTypes { release {原创 2016-09-04 16:31:03 · 7292 阅读 · 1 评论 -
Android多模块构建合并aar解决方案
前言前段时间,我在实现gradle多模块构建遇到一个问题,以前我们基本上是以jar包形式让开发者集成到工程中使用,但自从Android Studio中有了多module的概念,而我们的SDK也是分了多个模块进行构建的,但我们这里有个问题就是模块之间是相互关联的,不能针对每个模块单独打包,而每个module都会生成对应的aar,但并不会把依赖的module代码打进去,别问我为什么知道,你将aar后缀改原创 2016-11-19 16:14:04 · 21178 阅读 · 9 评论 -
Realm技术选型初体验
Realm Realm 是一个 MVCC (多版本并发控制)数据库,由Y Combinator公司在2014年7月发布一款支持运行在手机、平板和可穿戴设备上的嵌入式数据库,目标是取代SQLite。 Realm 本质上是一个嵌入式数据库,他并不是基于SQLite所构建的。它拥有自己的数据库存储引擎,可以高效且快速地完成数据库的构建操作。和SQLite不同,它允许你在持久层直接和数据对象工原创 2017-06-16 20:13:15 · 4339 阅读 · 2 评论 -
Android Junit单元测试-声明套件类
不知道大家日常开发会不会写单元测试用例,也是我们常说的小型测试,我们通常会为一些可测试的模块或类单独写一个测试类,如果我们测试类比较多的话我们就可能会声明一个测试套件类来统一运行多个测试类,本文就简单说一下如何来定义和声明测试套件类.JUnit中声明套件类主要是通过注解来实现的,这里有以下几个注解需要关注下:@RunWith(注解生命该类为一个测试入口(该类中不包含其他方法)@Category原创 2017-08-02 17:31:19 · 4654 阅读 · 0 评论 -
Retrofit2 & RxJava2实现单文件和多文件上传
Retrofit2 是目前Android开发主流的网络库,RxJava2也是目前开发者使用的比较多用来更优雅实现异步的库,因为最近业务需求有用到这两个库,就简单分享下它的一个实际使用场景—上传文件集成RxJava2和Retrofit2封装OkHttpManager类封装RetrofitClient类定义上传文件接口构造MultipartBody自定义RequestBody具体使用方法总原创 2017-09-04 18:58:32 · 10656 阅读 · 3 评论 -
Building TensorFlow on Android
本篇文章翻译自tensorflow官网,会加上自己的一些实操讲解,便于大家快速运行起第一个移动端机器学习的demo。为了让你在Android上开始使用tensorflow,我们将通过两种方式来构建我们的移动端的Tensorflow例子并将它部署到一个Android设备上。为什么要选择这些方法之一?在Android上使用Tensorflow最简单的方法就是使用Android Studio。如果你不打翻译 2017-11-26 21:14:09 · 4768 阅读 · 1 评论 -
升级Gradle 3.0重命名Apk并输出指定目录
背景是工程之前用的2.2.2版本,gradle-wrapper是gradle-2.14.1-all,这个版本的重命名apk和输出指定目录如下代码:android.applicationVariants.all { variant -> variant.assemble.doLast { def targetDir = "$rootDir/bin"...原创 2019-01-24 13:12:57 · 2567 阅读 · 3 评论 -
Bugly使用篇之Java错误堆栈还原
前言前面介绍了 Android混淆代码错误堆栈还原,相信大家已经知道如何通过Retrace在本地进行混淆代码还原了,上一篇提到,如果崩溃异常很多,你总不能一个一个去手动还原吧,不觉得这样做很没有效率么,有没有想过如果能实现线上监控崩溃并且能上传mapping文件进行快速还原,而不需要自己手动去做这样的一件事?没错,Bugly就是这样的一个平台,可以很方便快捷实现你这样的需求,能帮助到你提高开发效率,原创 2016-09-04 17:46:23 · 3736 阅读 · 0 评论 -
Android Library上传到JCenter仓库实践
前言这段时间研究了下以前做app开发的时候并没有太过关注的JCenter仓库,在实际开发当中通常都是使用第三方开发者上传到jcenter的library,而我们使用的这些library或者plugin是怎么发布到JCenter并让我使用的? 如果我们想开发一个Library或者plugin,我们该怎么做?带着这些问题,我围绕它做了以下实践:Android Library上传到JCenter仓库实践原创 2016-07-16 21:00:17 · 7933 阅读 · 3 评论 -
Android Crash之Native Crash分析
前言上一篇给大家介绍了Android Crash中的Java Crash分析,我们可以知道Java Crash一般会弹出提示框告诉我们程序崩溃了,通常使用Crash工具都能够捕获到;本篇博客来谈谈如何针对Native Crash进行分析,它相对与Java层面的Crash有什么特点?如何判断程序Crash是因为Native层导致的?我们怎么去分析它?下面我们一个一个解答这些问题。Native Cras原创 2016-06-19 10:54:08 · 23634 阅读 · 6 评论 -
Android自动化构建之Ant多渠道打包实践(下)
前言上一篇(Android自动化构建之Ant多渠道打包实践(上))已经介绍了Android的apk是如何构建的,本篇博客继续Ant打包的实践过程。集成友盟统计SDK这里以友盟统计为例,对各个渠道进行统计,我们需要先集成它的SDK配置权限 <!-- 权限 --> <uses-permission android:name="android.permission.ACCESS_NETWOR原创 2016-03-23 18:06:55 · 2905 阅读 · 1 评论 -
Android自动化构建之Ant多渠道打包实践(上)
前言Ant是历史比较悠久的一个自动化构建工具,Android开发者可以通过它来实现自动化构建,也可以实现多渠道打包,关于apk打包的方式一般有Ant、Python、Gradle三种,这三种打包方式都各自有优点和缺点,本篇博文先给大家介绍如何使用Ant来实现自动构建和多渠道发布。开发环境Window7Antjdkandroid sdkmac系统下所需要的运行环境也是类似的,我们都需要配置An原创 2016-03-23 15:03:31 · 2820 阅读 · 3 评论