Android
文章平均质量分 84
yubo_725
大前端攻城狮
展开
-
在Ubuntu中快速安装Android Studio的方法
在Ubuntu中安装Android Studio,你可以直接在https://developer.android.com/studio网站上下载Ubuntu对应的安装包来安装,也可以使用下面的方法在终端中快速完成Android Studio的安装,具体方法如下原创 2023-04-13 22:26:40 · 2164 阅读 · 0 评论 -
Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified
最近在写代码时碰到如下错误:java.lang.IllegalArgumentException: com.example.imdemo: Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent.Strongly consider using FLAG_IMMUTABLE, only use FLA原创 2022-04-25 20:08:10 · 41789 阅读 · 12 评论 -
搭建私有Jfrog artifactory仓库并上传Android Library
前言最近在负责公司内部的Android IM SDK开发,由于需要提供SDK给其他部门的项目使用,故打算将写好的IM SDK上传到Jfrog artifactory仓库,下面记录Jfrog的安装以及上传Android Library到该仓库的步骤。安装Jfrog关于Jfrog是个啥,这里不做过多的记录,可以理解为它是一个类似maven或jcenter的仓库,可以在其中存放各种类型的文件,是一个强大的通用包管理平台,国内可以直接通过这个地址访问:https://www.jfrogchina.com/查看原创 2022-04-23 19:57:14 · 9816 阅读 · 0 评论 -
使用React Native源码编译Android项目
前言公司的项目用到了React Native,最近通过后台监控到一些崩溃问题,主要出在React Native Java侧的源码中,由于不太好改这个问题,于是希望通过修改React Native源码达到规避Crash的问题,下面记录编译React Native源码的过程。准备工作...原创 2022-04-02 10:57:13 · 11161 阅读 · 10 评论 -
java.lang.RuntimeException: Cannot create an instance of class com.xxx.xxxViewModel
今天在Android项目中使用Hilt做依赖注入,结合Jetpack的ViewModel一起使用,报错如下:java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.quickandroid/com.example.quickandroid.MainActivity}: java.lang.RuntimeException: Cannot create an instance of class com.xx原创 2021-07-21 10:52:38 · 11262 阅读 · 1 评论 -
Android项目管理依赖方式总结
随着Android项目越来约大,管理项目中依赖的三方库成了一个非常重要的部分,若管理不当,不同module中可能会依赖同一个库的不同版本,这将导致非常严重的问题,要么是代码冲突,要么是APK包体积增大,亦或是项目构建的时间变长,拖慢开发效率。使用好的方式管理Android项目的依赖库显得尤其重要,本文记录了当下几种不同的管理Android依赖的方法,希望跟大家一起学习进步!原始方式这种管理依赖的方式是我们以前用得最多的,即直接将依赖的库写在module的build.gradle文件中,如下代码所示:.原创 2021-07-19 16:17:15 · 8889 阅读 · 1 评论 -
Android Jetpack Startup库分析
简介App Startup 库提供了一种在应用程序启动时初始化组件的简单、高效的方法。库开发人员和应用程序开发人员都可以使用 App Startup 来简化启动顺序并明确设置初始化顺序。App Startup 允许您定义共享单个内容提供者的组件初始值设定项,而不是为您需要初始化的每个组件定义单独的内容提供程序。这可以显着缩短应用程序启动时间。使用方法单个Initializer通过下面的配置在项目中引入Startup库:dependencies { implementation("andr原创 2021-07-14 19:51:32 · 5844 阅读 · 1 评论 -
Android AOP编程(五)——Gradle插件+TransformAPI+字节码插桩实战
开篇在前面几篇博文中,我记录了Android AOP编程的一些基础知识,包括Gradle插件的开发、TransformAPI的使用,以及一些操作字节码的工具如AspectJ,Javassist和ASM:Android AOP编程(一)——AspectJ基础知识Android AOP编程(二)——AspectJ语法&实战Android AOP编程(三)——Javassist基础Android Gradle插件开发基础Android Transform API的使用Android AOP原创 2021-07-13 15:12:48 · 8259 阅读 · 0 评论 -
Android AOP编程(四)——ASM基础
前言在前面几篇博文中我记录了Android AOP编程使用的一些库,主要是AspectJ和Javassist:Android AOP编程(一)——AspectJ基础知识Android AOP编程(二)——AspectJ语法&实战Android AOP编程(三)——Javassist基础AspectJ和Javassist都能直接操作Class文件,本篇记录的是ASM,也是一个可以操作Java字节码的库,它的使用可能更复杂一些,本篇只做最基本的使用方法记录。什么是ASMAS原创 2021-07-09 11:05:25 · 10387 阅读 · 3 评论 -
Android Transform API的使用
TransformAPI是什么从 1.5.0-beta1 开始,Gradle 插件包含一个 Transform API,允许 3rd 方插件在将编译的类文件转换为 dex 文件之前对其进行操作。(API 在 1.4.0-beta2 中存在,但在 1.5.0-beta1 中已完全修改)此 API 的目标是简化注入自定义类操作而无需处理任务,并为操作的内容提供更大的灵活性。内部代码处理(jacoco、progard、multi-dex)在 1.5.0-beta1 中已经全部转移到这个新机制。注意:这仅适原创 2021-07-08 11:06:46 · 10778 阅读 · 0 评论 -
Android Gradle插件开发基础
什么是Gradle在Gradle官方文档上是这么描述的:Gradle 是一种开源构建自动化工具,其设计足够灵活,几乎可以构建任何类型的软件。Gradle 允许您构建任何软件,因为它对您尝试构建的内容或应该如何完成几乎没有做出任何假设。最显着的限制是依赖管理目前只支持 Maven 和 Ivy 兼容的存储库和文件系统。Gradle 将其构建建模为任务(工作单元)的有向无环图 (DAG)。这意味着构建本质上是配置一组任务并将它们连接在一起——基于它们的依赖——以创建该 DAG。创建任务图后,Gradle原创 2021-07-07 15:41:57 · 11456 阅读 · 0 评论 -
Android AOP编程(三)——Javassist基础
什么是Javassist这是Javassist官方网站上的说明:Javassist(Java 编程助手)使 Java 字节码操作变得简单。它是Java中用于编辑字节码的类库;它使 Java 程序能够在运行时定义一个新类,并在 JVM 加载类文件时修改它。与其他类似的字节码编辑器不同,Javassist 提供了两个级别的 API:源代码级和字节码级。如果用户使用源级 API,他们可以在不了解 Java 字节码规范的情况下编辑类文件。整个 API 仅使用 Java 语言的词汇表设计。您甚至可以以源文本的形式原创 2021-07-06 15:28:05 · 6630 阅读 · 0 评论 -
Android AOP编程(二)——AspectJ语法&实战
在上一篇Android AOP编程(一)——AspectJ基础知识中我记录了在Android中使用AspectJ实现AOP编程的一些基础知识,但是AspectJ的使用其实最主要的是针对切面的语法,找切面并不难,难的是如何编写匹配这个切面的规则,本篇主要记录的就是AspectJ的语法,以及使用一个实例来解释AspectJ的应用。AspectJ语法整理以下关于AspectJ的语法整理全部出自网络收集,并未一一验证,若有错误请指出。execution使用execution(<匹配表达式>).原创 2021-07-06 12:17:07 · 6932 阅读 · 1 评论 -
Android AOP编程(一)——AspectJ基础知识
什么是AOP以下是维基百科上对AOP的介绍:面向切面的程序设计(Aspect-oriented programming,AOP,又译作面向方面的程序设计、剖面导向程序设计)是计算机科学中的一种程序设计思想,旨在将横切关注点与业务主体进行进一步分离,以提高程序代码的模块化程度。通过在现有代码基础上增加额外的通知(Advice)机制,能够对被声明为“切点(Pointcut)”的代码块进行统一管理与装饰,如“对所有方法名以‘set*’开头的方法添加后台日志”。该思想使得开发人员能够将与代码核心业务逻辑关系不那原创 2021-07-05 15:18:28 · 6917 阅读 · 0 评论 -
深入理解Java注解(三)——编译时注解实战
在前面两篇博客中我记录了Java注解的一些知识点,以及如何使用JavaPoet生成Java源码,本篇主要记录的是使用Java编译时注解完成一个类似于ButterKnife的Android View注入功能,通过注解即可完成View的ID绑定,不再显式调用findViewById方法。如果对Java注解还不太熟悉,可以参考我前面两篇博文:深入理解Java注解(一)——注解基础 | 深入理解Java注解(二)——JavaPoet使用开始本篇博客的代码还是基于深入理解Java注解(一)——注解基础 这.原创 2021-07-01 10:42:52 · 6831 阅读 · 0 评论 -
深入理解Java注解(一)——注解基础
一直以来对Java注解的理解都不是特别深刻,但是在多年的软件开发生涯中接触了不少注解相关的东西,所以有必要深入理解一下Java注解知识,通过本篇博客记录学习Java注解的一些知识点。什么是Java注解举个例子,在Java开发中,我们会使用@Override标记一个被子类复写的方法,使用@Deprecated标记一个方法或者一个类表示方法或类已被弃用,不再推荐使用。这里的@Override @Deprecated就是Java注解,查看@Override源码如下:package java.lang;.原创 2021-06-29 10:59:37 · 6126 阅读 · 0 评论 -
Android Jetpack Compose学习(三)—— 各种控件的用法
前言Jetpack Compose主要是用来写Android UI的,Android UI无外乎文本、图片、列表等各种控件的展示,这里我用的“控件”一词不确定是否准确,因为传统的Android UI确实是一个个控件,而在Jetpack Compose中,类似Text Image Column Row等其实是用Kotlin写的一个函数,这个函数会渲染出对应的文本、图片、列表等。今天记录的主要是这些“控件”的使用方法。Text使用Text可以显示一行文本,下面的代码展示了Text的一些用法:@Previ原创 2021-06-08 14:22:44 · 7327 阅读 · 2 评论 -
Ubuntu18 编译 AOSP 步骤
什么是AOSPAOSP是"Android Open Source Project"的缩写,即"Android开放源代码项目",由谷歌发起,此项目致力于Android的维护和更进一步的发展。编译前准备系统信息本次编译在Ubuntu系统上进行,系统版本如下:yubo@work-105:~$ cat /etc/issueUbuntu 18.04.2 LTS \n \l由于AOSP源码巨大,请确保磁盘空间至少还有200GB,另外内存和CPU配置尽量高,网络环境尽可能好,否则编译前下载源码就需要好久。原创 2021-06-04 10:45:34 · 13025 阅读 · 10 评论 -
Android Jetpack Compose学习(二)—— Jetpack compose基础布局
在没有推出Jetpack Compose时我们开发Android UI一般使用的布局都是LinearLayout, FrameLayout, RelativeLayout, ConstraintLayout等,在Jetpack Compose推出后,开发布局的方式有了很大的改变。Jetpack Compose标准布局组件在许多情况下,我们只需要使用Column和Row即可完成布局,Column可将多个项目垂直放置在屏幕上,Row则可以将多个项目纵向放置在屏幕上,下面举例说明:Columnimpo.原创 2021-06-02 14:11:02 · 6496 阅读 · 5 评论 -
Android Jetpack Compose学习(一)—— Jetpack compose入门
Jetpack compose简介Jetpack compose是Google推出的用于构建原生Android UI的一个工具包,它使用了大量的Kotlin语言特性,其开发方式与Flutter很类似,可以在很大程度上简化Android UI的开发。目前(2021年5月31日)Jetpack compose的版本为Beta版,还未发布1.0正式版。需要注意的是:只能使用Kotlin语言来做基于Jetpack compose的开发Jetpack compose起步目前(2021年5月31日),要在An原创 2021-05-31 14:59:09 · 4109 阅读 · 6 评论 -
在M1芯片的Macbook pro上高效开发Android的正确姿势
前言2020年11月,苹果发布了M1芯片以及搭载M1芯片的Mackbook pro,由于我的老笔记本还是17款的8G内存的Macbook pro,已无法满足高效工作的需求,而M1芯片在各个自媒体的评测中都取得了非常惊人的性能成就,于是我将自己的旧笔记本通过Apple官方回收卖掉,置换了一台16G的搭载了M1芯片的Macbook pro,本以为工作效率会大大提升,没想到悲剧才开始。各种坑与解决方案由于M1芯片基于arm64架构,跟intel的x86不同,虽然苹果提供了Rosetta帮助用户在M1芯片上运原创 2021-05-14 10:46:44 · 14209 阅读 · 0 评论 -
Android apk文件反编译获取源代码
下面说一说Android APK文件的反编译过程,对于没有做过代码混淆的Android应用,可以用如下原创 2014-09-29 13:48:40 · 1254 阅读 · 0 评论 -
Android使用Eclipse搭建NDK开发环境
这几天一直在学习搭建Android NDK开发环境,网上的教程虽然一大堆,但是很多都是使用Cygwin来做的,以前原创 2014-08-16 17:02:06 · 891 阅读 · 0 评论 -
Android前置摄像头预览并检测人脸,获取人脸区域亮度
本篇博文记录如何使用Android的前置摄像头预览,并获取人脸部分,然后计算人脸区域的亮度,下面是程序运行截图:下面上代码:1、前置摄像头预览时需要用到的类CameraView:package test.com.getbright;import android.app.Activity;import android.content.Context;import andr原创 2015-12-15 12:10:42 · 13615 阅读 · 1 评论 -
Android设置launchMode为singleTask的Activity怎么刷新页面内容
在需要启动另一个activity,并传递一些数据时,我们常采取如下的方法: Intent intent = new Intent(this, ActivityB.class); intent.putExtra("name", mUserName); startActivity(intent); 同时在Activity转载 2015-11-08 12:02:12 · 6245 阅读 · 0 评论 -
Android ListView的setEmptyView方法的使用
在Android开发中,经常会用到ListView显示数据,但是当ListView中没有数据的时候,如果显示一片空白,对用户来说是个不太好的体验,我们可以在ListView中没数据的时候给用户一个提示,如暂无数据之类,在没有用到ListView的setEmptyView方法之前,我的做法是,在ListView的下面放一个用来显示提示信息的布局,当ListView为空时就隐藏ListView,显示提原创 2015-08-03 17:08:14 · 15251 阅读 · 1 评论 -
Android沉浸式状态栏的开发
今天要记录的是Android沉浸式状态栏的开发,看到别的应用都有沉浸式状态栏,是不是感觉很爽,今天我也来做一个沉浸式状态栏的例子,如下图所示:哇擦,图好大,就不改了。。。下面记录一下实现过程:1、首先在需要使用沉浸式状态栏的Activity里,加上如下代码:package com.example.translucentstatusbar;import android.a原创 2015-06-11 14:56:51 · 2347 阅读 · 2 评论 -
Android调用系统相机拍照并获取图片
调用系统相机,我们需要用到Intent,而获取拍照后的图片数据,可以使用两种方式,下面贴代码:第一种方法:Intent mIntent = new Intent();mIntent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);mIntent.putExtra(MediaStore.Images.Media.ORIENTATION, 0);st原创 2015-06-09 10:35:28 · 1589 阅读 · 0 评论 -
AndroidStudio NDK开发
这篇记录的是如何使用AndroidStudio进行NDK开发1、首先新建工程,这里取名为TestJNI2、新建工程完毕后,需要下载NDK,具体方法是,打开File-->Project Structure,如下图所示:然后查看是否安装了NDK,如下图所示:如果没有下载NDK,上图中的红色框下面会有download链接,点击链接可以下载,或者有下载好的NDK,可以直接在原创 2015-12-23 13:49:25 · 3094 阅读 · 0 评论 -
Android开发之AndroidAnnotations框架的使用
AndroidAnnotations是Android开发中使用的一个注解框架,主要是通过各种注解来完成很多繁琐的代码工作,比如通过控件id找到对应的控件,在不使用框架的情况下,经常需要写一大堆的findViewById,但是如果使用AndroidAnnotations框架,只需要在声明控件变量时,给这个变量加一个注解@ViewById就够了,findViewById就可以省略了。Android原创 2016-04-21 10:45:23 · 5627 阅读 · 0 评论 -
Android事件总线AndroidEventBus的使用
今天学了了一个开源框架AndroidEventBus,该框架主要针对不同组件间的通信,如Activity、Fragment、Service等,在没有AndroidEventBus前,我们如果需要在不同的Activity或Fragment间通信,一般会选择使用广播来处理,在某个Activity中注册广播,在另一个Activity中发送广播,这么做虽然可以达到通信的目的,但是编码起来非常繁琐,Andr原创 2015-04-23 10:36:29 · 3471 阅读 · 0 评论 -
Android开发之OkHttp的使用
本篇记录的是Android开发中OkHttp框架的使用。OkHttp是Java中用于网络请求的一个库,主页为:http://square.github.io/okhttp/, github地址为:https://github.com/square/okhttp下面介绍OkHttp库的用法,本篇会给出OkHttp的使用demo,demo中包含了常用的get请求、post请求、文件的上传和下载,d原创 2016-04-18 17:55:58 · 10215 阅读 · 1 评论 -
Android通知图库更新
假如我们从网络下载了一幅图片,存入了本地,要在图库中能及时看到这幅图片的话,可以用下面的方法通知图库更新:Intent intent = new Intent(); intent.setAction(Intent.ACTION_MEDIA_MOUNTED); intent.setData(Uri.fromFile(f)); sendBroadcast(intent);这里原创 2014-12-26 16:23:32 · 2940 阅读 · 0 评论 -
Android AIDL的使用
今天有空复习了一下Android中AIDL的使用,由于平时开发中使用得不多,所以对AIDL的使用有些遗忘了,今天记录下来方便以后查看,并且记录一下AIDL使用过程中可能会遇到的一些问题。一、什么是AIDL。AIDL的全称是Android Interface Definition Language,主要用于应用之间的跨进程通信。二、AIDL的使用。Android中使用AIDL需要遵循...原创 2016-08-28 17:43:34 · 3545 阅读 · 0 评论 -
Android项目使用AFinal框架中的FinalDB模块时报错java.lang.NoSuchMethodException: getSerialVersionUID []的解决方法
前言本篇文章记录的是我近期在Android项目中使用AFinal框架的FinalDB模块时遇到的java.lang.NoSuchMethodException: getSerialVersionUID []错误的解决方法。 AFinal框架是Android开发中一个非常老的框架了,由于我刚开始学习Android开发时就使用了该框架,导致后来的开发工作中就一直使用的这个框架,包括网络请求,数据库操作原创 2017-01-05 20:56:03 · 8332 阅读 · 0 评论 -
如何使用夜神模拟器调试ReactNative应用
连接模拟器 在命令行下进入夜神模拟器安装目录的bin目录下,然后执行nox_adb connect localhost:62001如果端口号62001连接不上的话,改用52001试一下进入shell环境 执行下面的命令进入shell环境:nox_adb shell在shell环境下执行getprop命令,如下图: 找到dhcp.eth1.server对应的IP地址打开nox模拟器,确保原创 2017-06-22 12:10:45 · 9778 阅读 · 0 评论 -
Android dependency ‘xxx‘ has different version for the compile错误解决步骤
今天在AndroidStudio中构建项目的时候出现如下错误:Android dependency ‘com.android.support:cardview-v7’ has different version for the compile (27.0.2) and runtime (27.1.1) classpath. You should manually set the same ve...原创 2018-11-29 09:48:03 · 11270 阅读 · 1 评论 -
Android开源SlidingMenu的使用
SlidingMenu是Android上的一个侧滑菜单,如下图所示:今天主要记录的是SlidingMenu的使用,我们可以从Github上下载该开源项目,下载地址是:https://github.com/jfeinstein10/SlidingMenu使用SlidingMenu的步骤比较简单,只需要如下几步:1、在自己的项目中引入SlidingMenu的library2、在原创 2015-06-26 22:21:25 · 2977 阅读 · 0 评论 -
Android离线文档打开慢的解决办法
进入Android SDK的目录,用Firefox打开离线的HTML文件,然后按Alt键调出浏览器的菜单栏,选择文件-->脱机工作,就OK了~原创 2015-06-24 12:00:10 · 2729 阅读 · 0 评论 -
Android裁剪图片总结
在网上搜索了Android裁剪图片的方式,发现有两种:1、裁剪后返回的不是Intent中指定尺寸的图,而是缩略图2、裁剪后返回的是指定大小的图片关于这两种裁剪方式,我把自己试验后的结果记录如下:1、裁剪成缩略图模式,步骤如下:(1)先通过Intent选择图片,获取图片URI,代码如下:Intent intent = new Intent(Intent.ACTION_PICK原创 2015-06-24 16:37:44 · 4969 阅读 · 0 评论