Android
文章平均质量分 81
Android开发过程中遇到的问题及解决过程的记录。
VoidHope
移动开发。
展开
-
Android基础理解线程与进程
Android中,当一个应用程序启动并且应用程序没有组件在运行时,系统会为应用程序创建一个新额单线程的进程。默认情况下,一个应用程序的所有组件都运行在同一个进程中,以及同一个main线程。在系统中已经有应用程序正在运行时,被启动的组件会在这个应用程序的同一进程中运行。然而,组件的运行也可以被设计安排在一个不同的进程中执行,并且在任一进程中创建不同的线程。原创 2023-05-29 15:25:19 · 788 阅读 · 0 评论 -
non-protected broadcast场景分析及解决
在两个app之间互相送消息使用,有时在运行过程中在logcat工具中会发现大片的飘红消息。要消除这些错误信息,需要在广播的和做部分的修改。原创 2023-05-24 17:04:26 · 1162 阅读 · 0 评论 -
Android AIDL示例及高版本问题
按照blog解释,基于对私有数据越来越严格的控制,且在一般场景下,app不需要完全查询调用一个设备上的其他所有的应用。在Android 11(API Level 30)以上,App可查询的应用列表被看作是私有敏感数据,即要查询或调用其他app时,会受到系统限制,也就是Android上对应用的访问查询做了更加严格的限制。关于Android AIDL不论是官方文档,还是网络上的资料信息,都讲解的很完整,包括Binder机制。上述的AIDL定义,程序实现,调用均在Android 8上执行,可以成功调用。原创 2023-03-16 16:55:58 · 663 阅读 · 0 评论 -
Android Battery信息
检测Battery相关数据原创 2023-03-13 14:12:48 · 457 阅读 · 0 评论 -
Android Studio工具问题及解决
文章目录Android Studio工具问题(逐步梳理中~)找不到DataBindingMapperImplAndroid Studio工具问题(逐步梳理中~)Android Studio使用中配合Gradle构建工具,由于Gradle的版本之前差异很大,因此有是在修改project的文件过程中会遇到各种问题,这里记录了我在开发过程中逐渐梳理的遇到的问题。Project结构:Project | ---- app | ---- phase1 | ---- baseap原创 2022-05-10 15:36:43 · 878 阅读 · 0 评论 -
Win小众好用软件推荐(持续更新)
文章目录小众好用软件推荐(持续更新~~~)GifCam4n6 Hex Editor小众好用软件推荐(持续更新~~~)在开发过程中,很多时候需要除了IDE以外的一些辅助软件来查看一些中间过程的结果,或者为了方便于给其他人显示效果。这里梳理一下小众的软件,非常好用,可以用来辅助开发。有知道更多好用的小众软件的同学可以在评论区来提醒我。GifCamGifCam是用以制作gif动图的应用,是一款免费软件。在它的官方网站可以下载最新版本GifCam | BahraniApps Blog。下载后就是一个原创 2021-04-09 23:32:07 · 246 阅读 · 0 评论 -
Ubuntu下JDK安装及设置
文章目录Ubuntu下JDK安装及设置减压缩设置环境变量验证安装是否成功Oracle JDK替换Open JDKUbuntu下JDK安装及设置很长一段时间内,未在Ubuntu下使用JDK,有些生疏了,重新梳理下安装及设置过程。## 下载Oracle JDK从 Java SE Development Kit 8 - Downloads (oracle.com) 下载 JDK 8版本。选择 jdk-8u281-linux-i586.tar.gz 文件下载。减压缩在下载的JDK文件所在文件夹中执行减原创 2021-04-06 16:49:56 · 422 阅读 · 0 评论 -
Android优化——proguard之缩减体积
文章目录Android Proguard代码压缩(code shrinking)原理测试自定义保留类资源压缩(Resource Shrinking)自定义保留资源严格引用检查资源压缩测试移除重复资源合并(merge)重复资源Android Proguard为了尽可能减小应用的大小,应该启用缩减功能来移除不使用的代码和资源。启用缩减功能后,您还会受益于两项功能,一项是混淆处理功能,该功能会缩短应用的类和成员的名称;另一项是优化功能,该功能会采用更积极的策略来进一步减小应用的大小。代码压缩(code原创 2020-10-28 23:12:21 · 619 阅读 · 0 评论 -
Android问题—Resources对象
文章目录Resources不同获取方式Resources.getSystem()Context.getResources()Resources不同获取方式最近在测试一段资源获取代码时,发现语法等均没有错误,但无法准确获取到资源ID,结果总是返回0。代码如下:override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.act原创 2020-10-28 22:55:47 · 657 阅读 · 0 评论 -
Android基础——认识AIDL&Messenger
文章目录概述AIDL创建aidl文件实现接口并向客户端公开AIDL调用Messenger服务端客户端调用服务端返回数据概述有经验的Android程序员应该都知道IPC的通讯方式除了AIDL外,还可以使用Messenger——Broadcast方式并不推荐。那么有了AIDL外,为何还需要Messenger呢?官方答案:只有在需要不同应用的客户端通过IPC方式访问服务,并且希望在服务中进行多线程处理时,才有必要使用AIDL。如果无需跨不同应用执行并发IPC,则应该通过实现Binder来实现接口。如果想原创 2020-09-28 22:23:47 · 310 阅读 · 0 评论 -
Android优化——截屏优化之缩短数据读取时间
文章目录缩短数据读取时间screencap命令原来方案运行时间修改方案运行时间缩短数据读取时间在我遇到的场景中,OS对正在开发的App进行特定授权后,App可以在系统内使用screencap进行截图操作(另外一种截图的方式需要依赖当前Activity,不适合当前的场景),因此目标在于优化此命令的执行及数据输出上。目标:缩短screencap输出数据的读取时间——绕开磁盘IO进行数据处理。screencap命令screencap格式:screencap: invalid option -- -u原创 2020-09-21 22:15:36 · 1760 阅读 · 5 评论 -
Nexus 私服上传Android库
文章目录环境Repository(仓库)创建Deploy脚本Signing相关知识环境我的环境使用的是 Ubuntu 18.04,在接着上篇《Ubuntu 18.04下Nexus 3.26私服搭建》后,再说说发布Android库到Nexus库上。Repository(仓库)创建打开部署好的nexus页面,并且准确登录进去——使用admin账户登录,可以有创建权限。选择 Repositories 选项卡,可以看到已有的仓库——这里已经创建了两个仓库。点击上图中的 Create rep原创 2020-08-26 21:50:44 · 621 阅读 · 0 评论 -
Android性能——处理Bitmap
文章目录高效加载大图读取位图大小及类型加载比例缩小版缓存位图内存缓存磁盘缓存管理图片内存大多情况下,一般推荐使用Glide来获取,解码,显示位图。Glide抽象了Android上图片处理这些和其他与位图和其他图像相关的任务的复杂性。下边整理的几点是Bitmap加载过程中的基础知识点,也会是Glide等图片库中需要解决的问题。高效加载大图图片以各种形状,大小展示。多数情况下,图片比用户UI更大。例如,相机拍着的照片像素数一般都比屏幕的分辨率更高。内存有限的情况下,理想情况只能是在内存中加载加载低分辨原创 2020-08-20 22:14:08 · 455 阅读 · 0 评论 -
Genymotion ARM Translations
Genymotion模拟器默认就是x86架构,在安装普通apk时很少能兼容,即无法安装。arm translations提取链接:提取链接,提取码:v2kj原创 2020-08-17 19:51:36 · 237 阅读 · 0 评论 -
Android API 不同版本的变化(积累更新中~~~)
文章目录External StorageExternal Storage平时绝对多数使用的是Environment.getExternalStoragePublicDirectory(String type)在 Android Q(API 29) 中开始被标记为 @Deprecated,不再建议使用来访问外部共享存储存储,理由依然是为了用户隐私安全。在APP中可以继续使用 Context.getExternalFilesDir(String type), MediaStore, 及 Intent原创 2020-08-17 19:11:58 · 329 阅读 · 0 评论 -
Ubuntu 18.04 Android模拟器/dev/kvm权限问题
文章目录Ubuntu 18.04 Android模拟器/dev/kvm权限问题的解决Ubuntu 18.04 Android模拟器/dev/kvm权限问题的解决在安装并使用Ubuntu 18.04后,创建Android模拟器,但是出现了/dev/kvm访问问题。从而导致启动模拟器失败。stackoverflows上Android Studio: /dev/kvm device permission denied 及medium上fix KVM permission denied有说明问题描述及解原创 2020-08-13 22:48:07 · 1447 阅读 · 0 评论 -
Android编译环境搭建——Ubuntu安装
文章目录ubuntu安装安装1——失败重制启动盘安装2——无法正常启动再尝试有项目需要,在一台PC上搭建Android系统源码的编译环境,方便后续任何修改尝试在系统环境中进行验证。ubuntu安装首先需要的当然是系统,首选的是Ubuntu,这里选择安装的是Ubuntu 18.04.4 LTS。安装1——失败在安装过程刚操作到选择时区页面时,弹窗显示安装失败,在copy文件时发生了input/output异常。搜索了下原因,在u盘安装ubuntu出现:【error5】Input/output原创 2020-08-10 22:52:20 · 1111 阅读 · 0 评论 -
BER-TLV的认识与原子数据解析
文章目录BER-TLVBER编码BER格式Tag/Type域Typetag域编码Length域定义格式(Definite)未定义格式(Indefinite)Content域Java解析BER-TLV方法封装BER-TLVBER-TLV中BER是Basic Encoding Rules的简写,是ASN.1的一种编码格式,它是将抽象信息编码成为具体数据流的最初规则。相关知识及定义来自:X.690BER编码BER格式描述了自我描述与分界的数据结构。每个数据编码为一个由type标识,length描述,da原创 2020-08-05 22:32:55 · 3043 阅读 · 2 评论 -
Battery Historian电量分析工具安装运行详解
文章目录Battery Historian安装Docker安装虚拟功能Android模拟器冲突源码编译安装下载配置问题working directory is not part of a module单步执行closure-library错误运行获取bugreport.txt渲染分析在线分析Battery HistorianBattery Historian是开源的工具,代码链接地址。工具可以用于分析Android(5.0及以上)设备——不插电前提下——运行过程中电池相关的信息和事件。工具可使应用开发原创 2020-07-28 22:55:28 · 3038 阅读 · 0 评论 -
Android ADB命令集锦(更新中~~~)
文章目录常用ADB命令adbbroadcast(广播)启动Activityservice(服务)adb connect 无线连接失败杀死进程(force-stop)卸载APK输入keydumpsysDoze模式测试应用待机模式下测试查看当前正在运行的ActivitykeytoolAPK签名信息keystore信息PKSC12常用ADB命令记录Android开发过程中常用的命令。adb使用adb命令可以在某些情况下比IDE更加直接,更有效率的调试开发环境。broadcast(广播)adb shel原创 2020-07-23 23:19:49 · 948 阅读 · 0 评论 -
android 拨号上网流程
android 网络拨号流程:frameworks\base\services\java\com\android\server\ ConnectivityService.java->[MyHandler ->handleMessage ->case EVENT_SET_MOBILE_DATA ->handleSetMobileData]frameworks\base\service转载 2012-08-20 15:44:06 · 3193 阅读 · 0 评论 -
编译Framework/base 下添加自定义模块的步骤
在Android源码编译成功的基础上,重新编译带自己API的android.jar需要进行以下几个步骤操作:1、添加自己的源代码,在android源码的frameworks/base目录下新建一个文件夹保存代码,如MStarDTV,以包的形式命名添加的文件所在的路径,如/MStarDTV/java/android/dtv,添加的java文件开头定义的包既是编译成功的class文件所在的包。转载 2014-02-13 16:15:38 · 2919 阅读 · 0 评论 -
Android资源获取方式
Android v4包已经更新过多个版本,在不同版本也新增加诸多新API,方便了开发人员的使用,这里要说的是针对资源获取的新API。 新API给予了开发人员很大的方便,无须再像以前一样判断版本号,使用不同的方式去调用。 ContextCompat完整限定名:android.support.v4.content.ContextCompat 此类是Context的帮助类,在API 22(即5.原创 2017-08-04 01:23:18 · 655 阅读 · 0 评论 -
Android基础——电源管理(Power Management)
文章目录电源管理待机组省电模式改进电源管理Android 9上引入了新特性,帮助改善设备电量管理。电量管理新特性主要分为:应用待机群组系统基于用户使用方式的不同,限制APP对CPU或者电池的访问。这是Android 9新特性。省电模式改进当打开省电模式,系统对所有APP施加限制。这个特性在Android 9上得到了改进。PS:这个改变是针对针对所有的APP,不管APP目标是否是Android 9.待机组5各群组:Active用户正在使用的APP属于active群组,例如:原创 2020-07-23 22:03:17 · 1295 阅读 · 0 评论 -
测试电源相关问题(Power Related)
文章目录测试电源相关问题ADB命令APP待机组后台限制省电模式测试电源相关问题电源管理特性在Android 9(API 28)上多所有APP均会产生影响,不论APP的target版本是否设置为28。因此在测试时尽可能测试多的场景用例,查看电源管理特性的交互情况。同样也可以使用ADB命令辅助开启某些特性。PS: 这里测试结论,在Android 8.1.0平台上无法使用一下命令,api 版本不够。ADB命令可使用ADB命令测试若干种电源管理特性。APP待机组使用ADB命令可以使APP进入到待机群组原创 2020-07-23 21:55:03 · 412 阅读 · 0 评论 -
Android音频输出设备判断 & Headset(耳机)在位状态查询
文章目录Headset(耳机)在AudioJack(音频插孔)状态在Android平台版本迭代过程中,新API不断出现,旧API会被标记Deprecated。虽然deprecated的API依然可以使用,但在不断迭代过程中,其起到的作用慢慢不太符合对应的需求,或者其原有实现被分解更加详细地实现。这里我遇到的耳机的状态判断就是其中一种情况。## isWiredHeadsetOn() 在API 15(含)后被标记为deprecated的isWiredHeadsetOn()这个方法,一般就被使用来判断是否有耳机设原创 2020-07-17 14:36:21 · 7137 阅读 · 0 评论 -
Android基础——认识Service
文章目录重识ServiceService类型Service与线程(Thread)基础创建Service运行前台服务(Foreground Service)Service生命周期重识ServiceService是应用程序组件application component,可以运行在后端执行耗时操作。Service没有UI,开始后可持续执行一段时间的操作,即使切换到其他APP后也继续执行。另外,service运行在主进程之中,它自身不会创建线程或运行在一个独立的进程中,要想service独立运行在一个进程中,原创 2020-06-19 20:26:48 · 223 阅读 · 0 评论 -
Android基础——内存管理知识整理
文章目录概览Android内存管理预研垃圾回收内存共享限制内存切换APP进程间内存分配内存类型内存分页***内存不足管理***内存交换守护进程终止程序守护进程概览Android内存管理预研Android ART和Dalvik虚拟机采用内存分页和内存映射方式管理内存。垃圾回收垃圾回收机制的目标:找到不再被引用的的数据对象;声明回收不被引用对象占用的资源;Android对内存是分代管理的,即基于所分配对象的生命周期,大小进行不同的划分。比如,最新分配内存的对象属于新生代。在相当的时间之后,原原创 2020-06-19 20:22:20 · 449 阅读 · 0 评论 -
android学习笔记11
google map: MapActivity MapView ListActivity 添加权限 指定activity标签中添加:<uses-library android:name="com.google.android.maps" /> 书写的类extends MapActivity,添加MapView组件,在manifes...原创 2011-06-04 15:14:00 · 924 阅读 · 0 评论 -
Replugin踩坑日记
Replugin踩坑日记因为项目需要,开始接触插件化结构,最近RePlugin的信息比较火,社区比较活跃。查看了RePlugin的一些基本信息后,选择使用RePlugin作为插件化利器。第一个需要的需求就是加载插件apk中的fragment在宿主中显示。在查看sample时,惊喜地发现其中就有相关的例子。由于RePlugin的Sample大而全,也不好直接下载运行,因此自己创建了对应的宿主,插...原创 2019-10-10 23:02:51 · 1728 阅读 · 0 评论 -
Android基础——从存储介质打开文档
从存储介质打开文档使用存储访问框架(SAF-Storage Access Framework)打开文件概览控制流程创建客户端搜索文档搜索结果检查文档元数据打开文档BitmapInputStream创建文档删除文档编辑文档保存权限打开虚拟文件补充——Uri获取对应本地绝对地址使用存储访问框架(SAF-Storage Access Framework)打开文件Android 4.4(api lev...原创 2019-08-28 18:53:04 · 24503 阅读 · 2 评论 -
Jenkins Android项目编译配置(完整版)
Jenkins编译项目配置创建项目General源码管理构建触发器构建环境构建构建后操作创建项目在Jenkins首页,点击“新建Item”进入到创建页面点击“确定”后进入到基本模板配置页面。GeneralGeneral 选项卡可以配置项目描述,以及基本的配置。这里需要着重注意的checkbox项是"This project is parameterzed"。选中后可以定义变量...原创 2019-08-16 23:48:42 · 14403 阅读 · 5 评论 -
Android问题——解决Toast在APP通知关闭不显示
Android在8.0中针对通知一块在功能上做了较大的改动。Toast被纳入到了通知管理,其实这在Android 4.4(API 19)以上就已经有特别的处理了。只是一般用户不会怎么注意,开发人员也不会很在意APP的通知开关,因为GOOGLE还没有在通知上大做文章,进入到APP信息中,通知的开关也不是很起眼。但是8.0上针对通知部分(主要针对下拉通知)做了较大修改,其中牵连到Toast,且APP...原创 2019-01-19 04:54:37 · 4868 阅读 · 0 评论 -
离线下载Android SDK(100%成功)
最近想在自己的电脑上搭建android开发环境了,由于电脑上很干净(没有任何开发环境),也就是从零开始,虽然知道sdk下载地址被墙了(那个墙很坑爹,好的资源都被墙)。这里说的方法并非打开sdk-manager.exe的方式,因为这种方式只在android-sdk_r24.4.1-windows.zip之后就不再更新相同的方式了,算是里程碑了。再后边的版本只有一个tools文件夹了,换了文件格式,在w原创 2017-10-29 23:50:30 · 16561 阅读 · 5 评论 -
Android多进程app中Application回调onCreate()方法被执行多次分析及解决
问题描述最近工作中碰到一个问题,在优化app,使用DDMS查看Application log过程中看到,app启动了三个进程,一个主进程,两个附带的进程。如下图可看到一个app启动的三个进程。 自定义Application回调方法onCreate()被执行了3次。开始不知是何原因。相关知识 android:process从Android开发者文档中的manifest中进程配置android原创 2017-06-08 11:10:47 · 10534 阅读 · 0 评论 -
Android获取运行进程解决方案分析
在Android中获取运行进程这种需求在许多场合需要被使用到,但实际情况是在Android Lollipop即5.0后,Google开始收紧对底层权限控制。 下面就涉及的方法及我现在找到的解决方案来分析下,是如何解决这个问题的。可以从原有的几个方法的API变化及调用返回看出。 - getRunningAppProcesses()在直到4.x, 5.0版本上工作良好(即便API中提示此方法仅用于d原创 2017-06-28 00:51:59 · 4464 阅读 · 3 评论 -
Canvas和Drawable 绘制组件
将博客搬至CSDN转载 2014-10-23 11:28:11 · 5183 阅读 · 0 评论 -
android学习笔记5
<br />GridView:<br /> 1、网格显示资源内容<br /> 2、使用numColumns属性列数<br />Tab:<br /> 1、写的tabActivity类要继承 TabActivity,其自身已经是一个Activity,无需再次进行渲染;<br /> 2、在代码中获取TabHost对象,使用LayoutInflater对象的inflater(int xmlLayoutSrc, TabHost.getTa原创 2011-04-18 10:39:00 · 915 阅读 · 0 评论 -
android学习笔记4
RatingBar: 1、RatingBar的layout_width若是“fill_parent”,星号会超屏 2、getRating()/setRating(float)ImageView: 1、使用setImageResources(int imageId)ImageButton: 1、在drawable-mdpi文件夹中创建xml文件,指定控件的光标事件,点击事件等, 例: xmlns:android="http://schemas.and原创 2011-04-15 08:44:00 · 898 阅读 · 0 评论 -
android学习笔记10
<br />googleMap<br /> EditText 中光标定位 android:gravity = "top"<br /> gps模拟:连接本地模拟器 telnet localhost<br /> <br /> 【重点】<br /> WebView组件{网页浏览器}<br /> getSettings() WebSettings对象 设置对js内容的支持<br /> 客户端对话框支持:<br /> setWebChro原创 2011-05-23 23:41:00 · 785 阅读 · 0 评论