- 博客(46)
- 资源 (3)
- 收藏
- 关注

原创 Android版中文分词器:原理、接入和启动优化
Android版中文分词:原理、接入和启动优化结巴分词的原理接入方式启动速度优化中文分词功能是一项常用的基础功能,有很多开源的工程实现,目前能应用于Android手机端的中文分词器没有很完善的版本。经过调研,我选择了结巴分词,该开源工程思路简单,易于理解,分词效果也还不错,目前有众多语言版本,PYTHON、C++、JAVA、IOS等,暂时还没有Android版本,所以我在Java版本的基础上进行...
2018-11-21 16:37:57
1504
原创 Android信息统计和崩溃收集工具
Android信息统计和崩溃收集工具用户行为数据收集友盟TalkingDataCountlyFlurry(Yahoo)MixpanelGoogle Analyticsapp性能数据收集听云Android移动应用数据统计工具按照功能划分为两类,一类是用户行为数据收集,如新增注册用户数,留存用户数,活跃用户,PV、UV等,代表工具包括国内的友盟,TalkingData,以及国外的Countly,Fl...
2018-11-27 18:11:33
1155
原创 Android测试技术
Android测试技术Local Unit testInstrumented testsInstrumented Unit TestUI Test本文Github Demo地址相比于服务器测试的高度自动化,Android app的测试因其交互性复杂,运行需要Android环境,并且测试用例编写比较琐碎等原因,在大部分公司通常单纯由测试人员手工完成,自动化程度比较低。每次版本迭代需要把所有的路...
2018-11-27 18:11:27
384
原创 Dialog使用介绍
Dialog使用介绍简单的对话框含列表的对话框自定义view样式Dialog和Activity交互Dialog展示Dialog取消展示Dialog展示WebView,监听后退键本文Github Demo地址Dialog是Android里面用于让用户确认或输入信息的简单的UI展现形式,本文将通过Demo讲解如何使用Dialog。通常,我们不应该直接使用Dialog,而是应该使用Dialog的子...
2018-11-27 18:11:18
1629
原创 从Oppo手机拍照无法展示谈图片压缩
从Oppo手机拍照无法展示谈图片压缩实际项目中遇到一个需要拍照上传然后展示图片的功能,该功能在其他手机上都测试没问题,唯独Oppo手机拍摄的照片无法展示,后来发现是因为号称“拍照手机”的Oppo拍摄的照片分辨率过高的问题。该图片是jpg格式,分辨率为3120*4160。单纯在电脑上查看大小不过3.1M,为什么3.1M大小的图片都能导致OOM(Out Of Memory)错误呢?本文将进行讲解,...
2018-11-27 18:11:11
1529
原创 从Android源码分析View绘制流程
从Android源码分析View绘制流程关键路径摘要getWidth/getMeasuredWidth, getHeight/getMeasuredHeight的区别是什么丰富的View类型是Android手机的一大亮点,我们每天都在跟View打交道,了解View的绘制流程有助于我们更好的布局,以及实现漂亮高效的自定义View。本文将结合Android源码讲解View的绘制流程,不会拘泥于细节...
2018-11-27 18:11:01
283
原创 ClassyShark分析App信息
ClassyShark分析App信息嘀嘀出行用户端春雨医生诊所端App春雨医生用户端ClassyShark是Google开发的一个用于Android App分析的工具,可以分析jar, class, apk, dex, so, aar类型的文件。利用Classyshark对App进行分析,可以了解到该App采用了什么样的框架,用到哪些开源组件和技术,从而了解技术趋势,做到学以致用。Class...
2018-11-27 18:10:55
3684
原创 Android编译流程和Gradle使用
Android编译流程和Gradle使用打包过程Gradle文件体系Configure Build TypesConfigure Product FlavorsConfigure dependencyConfigure signing settingsAndroid工程的编译打包是个复杂的过程,期间既涉及到工程自身的源代码、资源文件、AIDL文件,又涉及到工程所依赖的库文件(Library, ...
2018-11-27 18:10:42
1477
原创 Socket编程--使用Tcp实现简单的聊天程序
Socket编程--使用Tcp实现简单的聊天程序计算机网络基础知识使用Tcp协议的Socket编程在Android聊天程序的实现中,通常是通过http请求拉取最新聊天信息,由于http请求是无状态(Stateless)的,无法随时获知新消息的到达,通常采用推送的方式告知客户端有新的消息。除了这种http+推送的方式外,也可以通过Socket编程实现聊天程序。本文将对网络层次进行简单的讲解,并结...
2018-11-26 15:49:18
5438
1
原创 Android动画技术分析
Android动画技术分析本文将介绍Android动画的实现技术。Android动画实现有三种技术,逐帧动画(Drawable Animation),补间动画(View Animation)和属性动画(Property Animation)。下面列出了三者的特点:1. 逐帧动画 图片一帧帧的播放,类似动画片2. 补间动画 将原始图片进行一系列的变换:平移,选择,缩放,淡入淡出。 缺...
2018-11-26 15:49:13
206
原创 SurfaceView实现简单的相机
SurfaceView实现简单的相机SurfaceView继承自View,主要用来展示视频流的绘制,典型的应用场景是相机,视频播放器,游戏界面绘制等。它独立于UI线程进行绘制,所以不会阻塞UI线程。本文将结合一个简单的相机demo介绍SurfaceView的使用。Github Demo地址我们实现的相机功能很简单,可以进行相机预览,点击拍照按钮拍照,并展示拍摄的照片,点击确定返回相机预览界...
2018-11-26 15:49:07
425
原创 Http协议的格式及实例
Http协议的格式及实例Http RequestHttp ResponseUser-agent键值对Cookie键值对Http协议位于网络五层结构的最上层应用层。它建立在TCP协议之上,是个无状态的协议,典型的应用是网络浏览器以及移动端数据传输。本文将介绍Http请求的格式,并对请求数据的各部分做一个详细介绍。Http协议包括多个方法:Get,Post,Put,Delete,Head,Pa...
2018-11-26 15:48:59
410
原创 Groovy在gradle中的应用
Groovy在gradle中的应用GroovyGradletask对生命周期的响应productFlavors使用Groovy一种基于JVM(Java虚拟机)的敏捷开发语言,能够与 Java 代码很好地结合。Groovy特点:1) Groovy 的松散的 Java 语法允许省略分号和修改符。2) Groovy 的所有内容都为 public,除非另行指定。3) Groovy 允许定义简单...
2018-11-26 15:48:54
435
原创 AnimatedLinearLayout:带删除动画的LinearLayout
AnimatedLinearLayout:带删除动画的LinearLayout本文介绍一个自定义ViewGroup:AnimatedLinearLayout,在普通的LinearLayout基础上,它实现了删除某一项后,后面的项依次前移或上移的动画效果,效果如下:GitHub下载地址代码如下:在onMeasure函数中加入init函数,该函数负责记录AnimatedLinearLayou...
2018-11-26 15:48:49
280
原创 Dex格式解析及在Tinker中的应用
Dex格式解析及在Tinker中的应用Part 1:怎样生成差量补丁1. ManifestDiff2. ResDiff/SoDiff3. DexDiffHeaderTableDataPart 2:怎么加载新的apkTinker:全量替换,无须插桩传统的热修复需要插桩实现,插桩的原因和操作:原因:1. 通过将补丁dex文件插入到类加载器的dexElement列表最前面,完成热修复2. 调...
2018-11-26 15:48:43
220
原创 Android Material Design库用法举例
Android Material Design库用法举例TextInputLayoutFloatingActionButtonsnackbarCoordinatorLayoutToolBar隐藏效果Toolbar折叠效果FooterView的隐藏和展示效果Android 5.0 Lollipop版本加入了Material Design库,通过这个库,开发人员可以轻松实现体现了Material ...
2018-11-26 15:48:38
675
原创 Android Icon-fonts:像文字一样操作图标
Android Icon-fonts:像文字一样操作图标在Android手机上,每种字体实际上就是一套图片,每个图片由一个个点阵组成,并赋予一个对应的Unicode编码。同样的道理,我们可以把一些常用的图标也制作成字体格式,分配Unicode编码,并像使用文字一样的使用这些图标,这就是Icon fonts的用法,这种方法经常被用于前端开发中。相比于使用Drawable对象,Icon font...
2018-11-26 15:48:32
635
原创 Android中H5和Native交互的两种方式
Android中H5和Native交互的两种方式Url拦截的方式JavaScript注入方式Native调用JavaScript在Android WebView使用中,经常需要H5页面和Native页面进行交互,比如在网页上点击分享按钮,调用本地分享接口进行分享,分享成功后本地调用网页的JavaScript代码展示一条分享成功的消息。实现H5页面和Native页面交互的方法有两种,一种是Url...
2018-11-26 15:48:26
1182
原创 Android HttpDns:我的域名我做主
Android HttpDns:我的域名我做主之前公司的产品遇到了用户忽然无法登陆使用的问题,后来查明是因为在用户发布的内容里有一张被判定为黄图的图片,导致我们的域名被运营商封锁。还有一种情况,部分地区的用户使用我们的产品时页面上被莫名插入了广告,后来发现也是运营商搞的鬼,劫持了我们的网站数据,并私自插入了广告。这里暴露出了依赖网络运营商进行域名解析的一些问题,总结如下:1. 域名封锁。运营...
2018-11-23 11:21:00
1089
原创 源码阅读系列:Picasso源码阅读
源码阅读系列:Picasso源码阅读Picasso初始化加载图片Android开发中,我们经常用到各种开源框架,很多优秀的框架不仅提供了功能丰富的功能接口,其高超的代码编写和组织水平也值得我们学习。通过学习这些框架的源码,有助于快速提高我们的编程质量。在接下来的博客中,我将对一系列优秀的开源框架源码进行阅读分析,目的有两个,一是理解框架的实现机制,从源码的角度去分析怎样更好的使用这些框架。二是从...
2018-11-23 11:20:52
199
原创 自定义Gradle插件相关知识
自定义Gradle插件相关知识Gradle内核本身提供的自动化构建功能十分有限,所有实际的功能都是通过插件的形势提供的,如编译Java代码的功能。通过插件可以:1. 添加新的Tasks,比如JavaCompile Task2. 在Gradle中添加新的对象,比如SourceSet对象,该对象用于添加一些约定的规则,像是Java源码放在src/main/java路径下3. 扩展Gradle...
2018-11-23 11:20:30
174
原创 Python+Android进行TensorFlow开发
Python+Android进行TensorFlow开发Tensorflow是Google开源的一套机器学习框架,支持GPU、CPU、Android等多种计算平台。本文将介绍在Tensorflow在Android上的使用。Android使用Tensorflow框架需要引入两个文件libtensorflow_inference.so、libandroid_tensorflow_inferenc...
2018-11-23 11:20:23
826
原创 Android JNI开发之Friso分词功能
Android JNI开发之Friso分词功能NDK是Google开发的一套开发和编译工具集,用于Android上JNI编程。通过NDK我们可以在Android上执行C/C++代码,进行一些CPU密集型的运算,比如游戏引擎,信号处理,物理仿真等。本文将通过在Android上调用Friso库实现分词算法讲解NDK开发的流程。Friso是一个开源的使用C语言编写的中文分词库,通过在Android...
2018-11-23 11:20:14
402
原创 基于TensorFlow Slim库实现手写数字识别
基于TensorFlow Slim库实现手写数字识别第一步:定义网络:第二步:定义输入输出,Loss和Optimizer第三步:训练模型,择优保存第四步:加载模型,预测本文介绍如何基于Tensorflow的Slim库,利用CNN(卷积神经网络)实现手写数字识别。本文GitHub源码地址首先介绍一些基本概念:tensorflow库placeholder和variable的区别:pl...
2018-11-23 11:20:04
249
原创 JNI Crash:异常定位与捕获处理
JNI Crash:异常定位与捕获处理方法一:ExceptionCheck机制方法二:信号量捕获机制基础知识一:信号量机制signal函数使用sigaction的使用基础知识二:Non-Local Exits利用上面的两个知识点通过信号量进行Android jni崩溃捕获和处理在Android JNI开发中,经常会遇到JNI崩溃的问题,尤其带代码量大,或者嵌入了第三方代码的情况下,很难进行问题...
2018-11-23 11:19:57
6671
2
原创 NER依存关系模型:原理,建模及代码实现
NER依存关系模型:原理,建模及代码实现seq2seq理论基础NER依存关系建模代码实现命名实体识别(Named Entity Recognization, NER)是AI任务中重要的一类,而且在技术落地方面已经走在各种应用的前列,通过命名实体识别,我们已经能够识别出诸如 “我 去 五道口 吃 肯德基” 这句话中的地址(五道口)和餐馆(肯德基),利用这个信息,我们就可以给用户展示五道口的...
2018-11-23 11:19:47
1408
1
原创 梯度下降及反向传递公式推导
梯度下降及反向传递公式推导之前发布在作业部落了,可以通过这个链接访问,其中的数学公式转过来比较麻烦,先看作业部落的链接吧:https://www.zybuluo.com/JackMeGo/note/1052246...
2018-11-23 11:19:37
526
原创 Android常用的设计模式之三:策略模式
Android常用的设计模式<三>:策略模式前两篇文章分别介绍了Builder模式和Observer模式,本文将介绍另一种Android里面经常用到的设计模式,策略模式。策略模式是一种通俗易懂的设计模式,常用于组织一些可替换的算法组件,这些算法组件本质上完成同一个性质的任务,可以互相替换,只是实现细节上存在些许差异。举个例子,为了完成射击敌人的任务,我们可以采取不同的武器进行,...
2018-11-22 10:42:04
130
原创 Android常用的设计模式之二:观察者模式
Android常用的设计模式<二>:观察者模式在上一篇Android常用的设计模式<一>:Builder模式中,介绍了Builder设计模式,本文将介绍另一种常用的设计模式,观察者模式。观察者模式涉及到两个基本概念,观察者和事件,思路很简单,事件对象将所有关心该事件的观察者对象添加在自己维护的一个Vector容器中,完成注册,当事件被触发时,通知列表中的对象,这些对象依...
2018-11-22 10:41:55
143
原创 Android常用的设计模式之一:Builder模式
Android常用的设计模式<一>:Builder模式设计模式是在日常的编程工作中对一些常见的问题场景总结出来的最优编程套路,通过这种抽象和总结,可以在遇到类似的需求时快速使用对应的设计模式,实现高效优雅的编程。在Android日常开发中,我们也会经常使用一些实用性强,具有代表性的设计模式,对这些设计模式进行了解和学习,不仅有助于我们理解Android框架下的代码,包括一些著名的开...
2018-11-22 10:41:46
193
原创 Android App内截屏监控及涂鸦功能实现
Android App内截屏监控及涂鸦功能实现Android截屏功能是一个常用的功能,可以方便的用来分享或者发送给好友,本文介绍了如何实现app内截屏监控功能,当发现用户在我们的app内进行了截屏操作时,将自动展示该截屏,并提供用户随意圈点涂鸦,添加马赛克,撤销,分享等功能。本文GitHub源码地址实现效果如下:实现该功能有以下技术需求:1. 当app在前台展示的时候能够自动监听用户在...
2018-11-22 10:41:32
1230
原创 基于Encoder-Decoder模式的机器翻译模型原理及实现
基于Encoder-Decoder模式的机器翻译模型原理及实现理论背景代码实现关键词: Encoder-Decoder, LSTM, WordEmbedding在机器学习领域,有很多任务是把一种样式的序列映射成另外一种样式的序列,比如把一种语言翻译成另一种语言,把一段语音转换成一段文本,给一段文字生成一句话简介,或者把一张图片转换成一段对图片内容的文字描述等。这些任务都可以看作是Seq2Se...
2018-11-22 10:41:12
8689
2
原创 斯坦福CS231n assignment1:SVM图像分类原理及实现
斯坦福CS231n assignment1:SVM图像分类原理及实现SVM模型原理SVM的一种直观解释损失函数损失函数加入正则化项梯度下降和梯度检验图像预处理小批量数据梯度下降(Mini-batch gradient descent)代码实现本文Github代码斯坦福CS231n课程讲解了实现图像分类的方法,从传统的KNN,SVM,到CNN,LSTM模型,讲解的非常专业精准。同时该课程提供了...
2018-11-22 10:40:56
1694
原创 词嵌入向量WordEmbedding的原理和生成方法
词嵌入向量WordEmbedding的原理和生成方法WordEmbedding的使用WordEmbedding的生成词嵌入向量(WordEmbedding)是NLP里面一个重要的概念,我们可以利用WordEmbedding将一个单词转换成固定长度的向量表示,从而便于进行数学处理。本文将介绍WordEmbedding的使用方式,并讲解如何通过神经网络生成WordEmbedding。WordEm...
2018-11-22 10:40:34
2817
1
原创 统计学习方法总结
统计学习方法总结感知机(preceptron):k临近方法:朴素(naive)贝叶斯法:逻辑回归(logistic regression)支持向量机(Support Vector Machines)隐马尔科夫模型本文总结了常用的统计学习方法,包括模型定义,原理,适用场景,模型参数学习方法等。统计学习是根据一部分标记好的实例数据,推断待分类实例的类别,所以并不知道数据的真实分布函数。有些场景只能...
2018-11-22 10:40:21
213
原创 斯坦福CS231n assignment1:softmax损失函数求导
斯坦福CS231n assignment1:softmax损失函数求导在前文斯坦福CS231n assignment1:SVM图像分类原理及实现中我们讲解了利用SVM模型进行图像分类的方法,本文我们讲解图像分类的另一种实现,利用softmax进行图像分类。softmax和svm模型网络结构很相似,区别在于softmax会对svm的输出分量进行归一化处理,使得每一个输出分量变成一个概率值,所有...
2018-11-22 10:40:04
721
1
原创 信息量、熵和交叉熵
信息量、熵和交叉熵信息量:熵交叉熵交叉熵和均方误差的区别tf.nn.softmax_cross_entropy_with_logits实现交叉熵和损失的计算总结信息量利用概率倒数的对数对事件的稀缺性进行衡量熵是一个随机系统信息量的期望交叉熵用于衡量两个概率分布之间的差异信息量:信息量是对事件发生概率的度量,一个事件发生的概率越低,则这个事件包含的信息量越大,这跟我们直观上的认知也是...
2018-11-22 10:39:46
779
原创 Android数据库ORM框架:GreenDAO使用简介
Android数据库ORM框架:GreenDAO使用简介特点使用步骤PropertyRelationIndex使用DAO API进行CRUD操作:执行raw sql语句Android最常用的数据库是SQLite,通常使用SQLite进行CRUD操作需要记住一些常用的SQL语句,这不利于提高开发效率,而且很容易出错。ORM(Object-Relational Mapping)框架的引入使得对数据库...
2018-11-21 17:25:56
368
原创 Android多线程的四种方式
Android多线程的四种方式Handler+ThreadPost方式sendMessage优缺点适用范围AsyncTask优缺点适用范围ThreadPoolExecutor适用范围IntentService特点当我们启动一个App的时候,Android系统会启动一个Linux Process,该Process包含一个Thread,称为UI Thread或Main Thread。通常一个应用的所...
2018-11-21 17:23:19
198
原创 从Android源码分析Activity加载流程
从Android源码分析Activity加载流程概述:startActivity->startActivityForResult->Instrumentation::execStartActivity->scheduleLaunchActivity->performLaunchActivity->handleLaunchActivity->handleResu...
2018-11-21 17:19:26
296
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人