
android
文章平均质量分 55
w_xue
这个作者很懒,什么都没留下…
展开
-
webview相关
在Android N及以下版本,webview默认跟browser端运行在同一个进程中,在Android O及以上版本,webview默认运行在单独进程,称为renderProcess,作为browser端所有webview的容器。browser端代码分为两部分android sdk部分,主要为android.webkit.*相关定义,代码仓库https://android.googlesource.com/platform/frameworks/base/桥接renderProcess端代码,代码原创 2021-12-15 17:28:52 · 1645 阅读 · 1 评论 -
jenkins支持多版本gradle编译
为接入jetpack compose,项目android gradle plugin版本需要升级,对应的gradle版本也需要从5.6.4升级到7.0.2,同时jdk环境也需要从jdk8升级到jdk11。一般编译脚本直接调用gradlew即可,不用关心具体的gradle版本,但是我们的编译环境不允许连接外网,所有依赖都是走公司私服代理下载。之前为了方便处理,jenkins编译流程中直接使用的gradle script,并且指定使用本地固定版本的gradle。此次变更要求现有分支代码使用jdk8 + gr原创 2021-09-17 10:54:18 · 1478 阅读 · 0 评论 -
tinker热修复之类修复
Tinker热修复包含多种类型的修复,如类修复,资源修复等,此处介绍类修复的基本原理。修复原理应用类的代码均位于apk包的dex文件中,在安卓设备上安装后dex文件一般位于/data/app/packageName-1/下的目录中,类的加载则需要依靠ClassLoader,由于有多个dex文件,加载的规则为越靠前的dex优先被系统使用。常见的PathClassLoader继承自BaseDex...原创 2021-09-02 15:31:31 · 206 阅读 · 0 评论 -
android JNI的使用
jni技术用于实现java与c/c++代码之间的连接。在android平台,通常用java代码实现应用的基本界面和交互逻辑,对于性能要求较高的代码则用c/c++实现,然后编译为.so库文件,在其中通过jni提供接口供java代码调用。在java中调用c代码编写java代码,其中需要本地实现的方法用native修饰class Hello{ native void printH原创 2021-09-02 15:08:48 · 540 阅读 · 0 评论 -
Android TextView 文本展开收起
在界面上需要展示一个TextView,默认超过4行则在末尾添加"展开",用户点击展开文本后则完整显示文本,同时末尾添加“收起”。先列出TextView的布局 <TextView android:id="@+id/content" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="20dp" andr原创 2020-09-22 11:02:31 · 2569 阅读 · 3 评论 -
java.lang.RuntimeException: Unable to instantiate application
以前经常在崩溃平台上看到如下的崩溃信息,具体错误信息如下 java.lang.RuntimeException: Unable to instantiate application com.xxx.yyy.App: java.lang.ClassNotFoundException: Didn't find class "com.xxx.yyy.App" on path: DexPathList[[zip file "/data/app/com.xxx.yyy-1/base.apk"],nativeL原创 2020-08-05 16:38:36 · 3916 阅读 · 1 评论 -
gradle plugin调试
假设我们这里是开发一个按照如下方式依赖的annotationProcessor// app模块build.gradleannotationProcessor project(":router-compiler")调试该插件需要做两件事情以debug方式启动gradle task连接到debugger调试模式启动gradle task在终端中按照如下方式启动即可,正常情况下编译会停住,等待debugger连接./gradlew assembleDebug -Dorg.gradle.dae原创 2020-06-19 15:20:04 · 806 阅读 · 0 评论 -
RxPermission源码笔记
只需要写如下代码,即可使用rxPermission实现动态获取权限,不需要activity重写任何代码RxPermission rxPermission = new RxPermission(this);rxPermission.requestPermission(Permission.Camera) .suscrible(permission -> { ...原创 2018-08-05 10:48:59 · 560 阅读 · 0 评论 -
ScrollView嵌套可滚动View
在实际项目需求中,经常会遇到ScrollView嵌套纵向可滚动的View,比如ListView,TextView。在默认情况下,ScrollView检测到纵向有滚动就会intercept touch事件然后滚动自身,导致子View根本无法滚动。网友的大部分做法是在子View检测到Down事件时马上requestDisallowInterceptTouchEvent,检测到Up事件时再取消reques原创 2017-08-30 20:39:55 · 577 阅读 · 0 评论 -
为nexus 5x编译android n固件
作为安卓从业人员,我们经常希望可以单步调试framework代码,可以方便的调试第三方应用。模拟器一般来说太慢,而且模拟器和官方sdk代码一样对应不上。最好的办法就是自己为nexus手机编译userdebug固件,本文以nexus 5x为例记录编译实践。原创 2017-08-19 22:59:47 · 2005 阅读 · 0 评论 -
开启应用调试属性
安卓应用是否可以被调试,取决于两个地方,一个是系统的ro.debuggable属性,另外一个是应用的debuggable属性。通常我们要调试第三方app,需要打开系统的可调试属性。原创 2017-08-17 14:47:45 · 548 阅读 · 0 评论 -
Jetpack navigation组件使用
类似于ios开发中的storyboard,android studio 3.2中引入了可视化导航。之前Activity和Fragment的跳转代码样式化且易出错,通过使用Jetpack中navigation组件,开发人员可以更直观的维护界面跳转。使用时需要引入依赖 implementation "androidx.navigation:navigation-fragment-ktx:$r...原创 2019-04-08 19:49:25 · 1479 阅读 · 0 评论 -
android l 中AppWidgetService的启动
在android l中,系统服务的启动分为6个启动阶段,定义在SystemServer类中,大部分服务继承自SystemService类,通过重写onStart方法实现自身的初始化,同时可以重写onBootPhase方法来监听启动流程,以便在合适的时候执行相应动作,这些方法会由SystemServiceManager来调用。AppWidgetService亦是如此。服务的启动只有一句,在在Syste原创 2015-03-05 17:41:44 · 2700 阅读 · 0 评论 -
RecyclerView 问题记录
1.调用更新数据后发现界面不展示,从layout inspector看到recyclerview中无子控件,检查发现没有设置LayoutManager。更离谱的是检查代码时还比对https://github.com/drakeet/MultiType 的sample code来对比,估计drakeet是在xml中设置了layoutmanagerLinearLayoutManager llm =...原创 2018-09-04 10:43:41 · 210 阅读 · 0 评论 -
迁移到androidx
官方早就推荐将support库迁移到androidx,因为后续support库不会再做更新。参考官方文档https://developer.android.com/jetpack/androidx/migrate其实只需要3.2版本的android studio,在菜单refactor中点击migrate to androidx即可,该向导会提示需要做的更新,包括gradle 插件版本至少...原创 2019-01-14 16:25:59 · 1240 阅读 · 0 评论 -
Android Device Monitor官方替代工具
随着android ide的升级,之前的一些调试工具逐渐废弃并被新的工具替代。之前大部分的调试工具都位于Android Device Monitor中,该工具集在android studio 3.1中被废弃并在android studio 3.2中被移除。如下表格列出以前Android Device Monitor的官方替代工具。原工具替代工具Dalvik Debug Mon...原创 2019-03-18 20:22:21 · 7667 阅读 · 0 评论 -
Jetpack Room使用
Room是安卓官方orm框架,用于简化Sqlite数据库的相关操作。使用Room通常步骤如下声明依赖定义数据库表,DAO,数据库类及升级策略操作数据库引入依赖引入google官方maven仓库allprojects { repositories { google() jcenter() }}在模块的build.gradle中添加...原创 2019-04-09 16:17:16 · 3529 阅读 · 0 评论 -
adb一直提示无法连接
在实际开发中,经常遇到手机显示usb调试已连接,但是android studio中提示找不到设备。在终端中执行adb shell同样提示找不到设备。搜索排查发现,需要采用如下命令启动adb方可看到错误信息adb nodaemon server我这提示的错误信息类似如下adb E 661 9881 usb_osx.cpp:331] Could not open interface:...原创 2019-05-20 14:28:26 · 1230 阅读 · 0 评论 -
android点击EditText外区域收起键盘
在日常开发中,Activity中可能有比较复杂的布局,比如嵌套很多Fragment,所以针对该需求,通常的做法为放到Activity中统一处理。常规思路为在dispatchTouchEvent中不拦截MotionEvent,但是会根据event是否落在EditText中做相应的处理,具体做法为 @Override public boolean dispatchTouchEvent...原创 2019-07-24 10:19:50 · 1985 阅读 · 0 评论 -
android手机安装busybox
busybox可以提供很多常见的linux命令的实现,在android调试时很有用,安装busybox需要已经获取手机root权限 。1. 下载文件在http://www.busybox.net/downloads/binaries/选择armv6l下载2. 将下载的文件传输到手机的Sdcard中:adb push busybox /sdcard/3. 将busybox原创 2013-07-01 16:29:14 · 1074 阅读 · 0 评论 -
android Parcelable类
android Parcelable类表示该类可以用来序列化,打包为数据流对象Parcel,通常用于进程间通信传递自定义数据类型。Parcel也相应的提供了一系列write/get方法方便打包和解包Parcel类。需要实现的方法主要是如何打包和解包Parcel类,具体如下: /** * Flatten this object in to a Parcel.原创 2015-01-20 17:42:17 · 712 阅读 · 0 评论 -
如何在android下使用binder
转载原地址:http://blog.youkuaiyun.com/yueliangniao1/article/details/71885491概述Binder是基于OpenBinder,在Android系统上使用的进程间通信机制。Binder基于Client-Server通信模式,本质上可以理解为它实现了Client对Server对象的远程调用。比如,有某个binder转载 2015-01-20 20:39:58 · 1015 阅读 · 0 评论 -
检测android某个intent是否有效
在需要用Intent打开文件时,如果intent无效会发生force close,如下代码可以检测intent是否有效,无效则弹出toast提示/** * Indicates whether the specified action can be used as an intent. This * method queries the package manager for install转载 2014-01-02 17:15:15 · 2873 阅读 · 0 评论 -
ImageView使用wrap_content时图片尺寸有缩放
这两天在做一个项目时,发现UI team给的图片无论我怎么设置layout,图片总是模糊的,有缩放,即使给imageView设置width和height为图片的原始尺寸大小也不行。后来想想只可能是android系统自身对图片进行了缩放,我之前是将所有的图片都放在res/drawable-hdpi文件夹中的。我的设置实际分辨率是1024*600,考虑到这一点,属于mdpi,于是我将所有的图片都移原创 2013-12-17 13:30:29 · 3089 阅读 · 0 评论 -
解决使用SearchView和Filter时出现搜索词悬浮窗问题
在andorid开发中,有时候会遇到这样的情况,界面中有一个SearchView,需要在其中输入内容来过滤ListView中的内容大致的做法如下:1. ListView的adpter实现Filterable接口/** * Adapter for exam/project list in session view. * */public class Session原创 2013-10-31 16:18:13 · 2747 阅读 · 1 评论 -
android中判断一个点是否在一个封闭Path中
1.了解点是否在多边形内的计算方式2.根据封闭path来取得多边形3.计算点是否在多边形内原创 2013-08-05 17:18:04 · 2582 阅读 · 3 评论 -
在android布局中使用include和merge标签
在我们开发android布局时,经常会有很多的布局是相同的,这个时候我们可以通过和标签实现将复杂的布局包含在需要的布局中,减少重复代码的编写。 1. 创建一个可以重复使用的布局:如下代码描述在应用中每个acitivity都出现的顶栏titlebar.xml<FrameLayout xmlns:android="http://schemas.android.com/apk/res/a原创 2013-05-11 11:18:46 · 2015 阅读 · 0 评论 -
android bluetooth开发
android 平台提供蓝牙网络协议栈的支持,允许一台设备与其它设备通过无线交换数据。应用框架通过android 蓝牙API提供对蓝牙功能的使用。这些API允许应用无线连接到其它的蓝牙设备,支持点对点、点对多的无线通信。通过android API,应用程序可以做到:扫描其它的蓝牙设备查询蓝牙适配器已经配对的蓝牙设备建立RFCOMM信道(channels)通过服务发现连接到其它设备与其它翻译 2013-05-17 15:27:29 · 1981 阅读 · 0 评论 -
android中判断service是否正在运行
有时候,我们的应用需要判断一个service是否正在运行,下面的代码可以判断AlarmService是否正在运行: private boolean isMyServiceRunning() { ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); for (Runn原创 2013-06-10 23:18:35 · 1133 阅读 · 0 评论 -
android将path拆分为多个path
在android开发中,我们有时会采用如下api来生成一个Path对象:Path path = new Path();path.addPath(firstPath);path.addPath(secondPath);后期我们想将该path拆分为多个path,可以采用如下方法:ArrayList list = new ArrayList();PathMeasure pm = new原创 2013-05-07 18:23:35 · 2296 阅读 · 0 评论 -
android应用程序内存分析
原文地址:http://android-developers.blogspot.tw/2011/03/memory-analysis-for-android.html翻译 2014-01-03 16:37:23 · 1107 阅读 · 0 评论 -
android sqlite3使用命令
sqlite3可以让我们对机器中的数据库直接进行操作,对于调试机,可以直接通过adb shell进入机器后使用。开启模拟器,执行adb shell后进入adb 环境就可以用sqlite3这个工具。myron@myron-laptop:~$ adb shell# sqlite3SQLite version 3.7.4Enter ".help" for instruction原创 2012-04-07 15:44:23 · 2080 阅读 · 0 评论 -
app widget 显示流程
在前面提到app widget的添加流程,最后一步为实例化一个AppWidgetHostView然后添加到Launcher中,我们重点看一下AppWidgetHost.createView方法,代码大致如下: /** * Create the AppWidgetHostView for the given widget. * The AppWidgetHost ret原创 2015-02-02 15:16:16 · 1341 阅读 · 0 评论 -
app widget添加流程
先看一下app widget的添加代码,此处直接引用http://www.cnblogs.com/wanqieddy/archive/2012/05/05/2484533.html的代码package com.qin.addappwidget; import android.app.Activity; import android.appwidget.AppWidgetHo原创 2015-01-30 18:12:19 · 2042 阅读 · 0 评论 -
android appwidget service的初始化
开机之后在system server启动AppWidgetService会创建AppWidgetService的实例,并调用AppWidgetService的SystemReady方法在此方法中完成了Widget的初始化和载入工作,主要是做了三件事情1.遍历所有安装包,找到符合条件的(ACTION=ACTION_APPWIDGET_UPDATE)和的Intent receiver原创 2014-09-11 17:20:02 · 2052 阅读 · 0 评论 -
图片加载
1.加载图片到ImageView中通常我们并不知道图片有多大,所以原创 2014-08-15 15:26:51 · 676 阅读 · 0 评论 -
apk反编译
针对没有混淆的android应用,我们可以很原创 2014-05-27 11:07:27 · 975 阅读 · 0 评论 -
android开发环境网络代理设置
针对android开发环境的更新经常会出现连接问题,所以原创 2014-06-05 11:23:02 · 1941 阅读 · 0 评论