Android相关
火龙映天
javac MyJava.java↓
java MyJava↓
Hello World!
展开
-
Android中开启系统WebView的inspect调试功能
Android的app中如果直接使用WebView组件加载网页,并且需要进行H5页面inspect调试的话,可以在app中调用如下接口:WebView.setWebContentsDebuggingEnabled(true);推荐在Application的onCreate()接口中调用。如果要在电脑端进行Android app中H5页面的inspect调试,最常用的方式有2种:1.使用Chrome浏览器:(需要翻墙)在地址栏中输入:chrome://inspect,即可打开inspect调试页面原创 2024-09-25 16:47:56 · 107 阅读 · 0 评论 -
Android中解决fi、fl字符显示时连在一起的问题
在某些手机或设置某些字体时,会出现fi、fl字符显示的时候连在一起,具体来说就是:f和i这两个字符在一起的时候,i上方的点跟f上方的钩子末端重合了;f和l这两个字符在一起的时候,l顶端和f的钩子末端重合了。其实这称为:合字(或称:连字、链接字、合体字,英文:Ligature),详细解释见:https://zh.wikipedia.org/wiki/%E5%90%88%E5%AD%97。为什么要有合字?简单来说就是:为了解决印刷排版上的问题而诞生的。所以合字并不是bug,而是一种显示风格或显示方式。而原创 2024-08-14 19:47:57 · 291 阅读 · 0 评论 -
Android Studio中创建apk签名文件
本文以macOS中Android Studio 2021.1.1版本为例介绍创建apk签名文件的操作步骤:1.启动Android Studio,并打开一个Android项目。2.依次点击菜单:Build -> Generate Signed Bundle / APK...。3.在弹出的"Generate Signed Bundle or APK"弹窗中选择"APK"选项,并点击"Next"按钮。4.在弹窗中点击"Create new..."按钮,以创建一个新的签名文件。5.在弹出的"New Key原创 2024-08-10 14:42:47 · 460 阅读 · 0 评论 -
Android中判断当前语言是否为繁体中文
Locale locale;if (Build.VERSION.SDK_INT >= 24) { locale = LocaleList.getDefault().get(0);} else { locale = Locale.getDefault();}String systemLanguage = locale.getLanguage();if (systemLanguage.equals("zh")) { String languageTag = locale.to原创 2024-08-10 13:09:50 · 300 阅读 · 0 评论 -
各品牌手机设置导航方式的操作路径的不完全统计
各品牌手机设置导航方式的操作路径的不完全统计:OPPO:OPPO Find X:设置-便捷工具-导航方式OPPO Find X3:设置-系统设置-系统导航方式一加9 Pro:设置-其他设置-系统导航方式vivo:iQOO Z5:设置-系统导航华为:华为nova 10:设置-系统和更新-系统导航方式荣耀:荣耀7X:设置-系统-系统导航方式荣耀9X:设置-系统和更新-系统导航方式小米:小米14 Pro:设置-桌面-系统导航方式红米note5:设置-更多设置-全面屏魅族:原创 2024-08-08 18:35:35 · 217 阅读 · 0 评论 -
解决加载so时出现java.lang.UnsatisfiedLinkError dlopen failed xxx.so is 32-bit instead of 64-bit异常的问题
解决加载so时出现如下异常:java.lang.UnsatisfiedLinkError: dlopen failed: "/data/user/0/com.test/.../libtest.so" is 32-bit instead of 64-bit说明当前App加载的so都是64位的,而libtest.so是32位的,所以加载时抛出异常。因为App加载so时,只能加载同样位数的so:只加载32位的so或只加载64位的so,不能混合加载。所以可能出现这种问题的情况有:1. App打包有问题原创 2024-08-01 14:59:07 · 321 阅读 · 0 评论 -
Android中接入hook框架:lancet-base
me.ele:lancet-base是"饿了么"开发的Android平台的开源hook框架,GitHub地址为:https://github.com/eleme/lancet。此框架的优点如下:1.编译速度快, 并且支持增量编译。2.简洁的 API, 几行 Java 代码完成注入需求。3.没有任何多余代码插入 apk。4.支持用于 SDK, 可以在SDK编写注入代码来修改依赖SDK的App。接入me.ele:lancet-base框架的步骤如下:1.在项目根目录的build.gradle原创 2024-07-21 14:57:54 · 440 阅读 · 0 评论 -
一种下载谷歌商店中应用apk文件的方法
通常在谷歌商店中的应用,只能安装到设备,不能获取到应用的apk安装文件。如果要获取应用的apk文件,可以使用如下方法:1.复制应用在谷歌商店的首页地址:谷歌商店(网址:https://play.google.com/store/apps)中搜索需要下载的应用,然后跳转到此应用的首页,然后复制此页面的url。比如:Google Home,其首页的url是:https://play.google.com/store/apps/details?id=com.google.android.apps.chrom原创 2024-05-25 13:32:26 · 2507 阅读 · 0 评论 -
Activity去掉默认动画效果
Activity无论是否设置style主题,默认都是有动画效果的。如果要去掉默认的动画效果,只需要在原有主题的基础上添加一个属性:windowAnimationStyle,并设置为@null即可。具体步骤如下:1. styles.xml中添加主题: @null原创 2024-05-06 12:54:17 · 496 阅读 · 0 评论 -
查看Android系统默认WebView浏览器内核版本
首先了解2个概念:1.Android系统默认WebView浏览器内核版本:是指Android的app中如果直接使用WebView组件加载网页的话,所使用的浏览器内核。这个浏览器来源于Android系统,app端无法修改。2.系统内置的浏览器应用的内核版本:是指Android系统中内置的名叫"浏览器"的app中所使用的浏览器内核。而这个"浏览器"app虽然是系统内置的,但是其本质上跟用户自己安装的app没有太大区别。所以此app可能使用了自定义的浏览器,所以其与系统默认浏览器内核版本可能不同。了解了上原创 2024-04-11 20:30:38 · 3677 阅读 · 1 评论 -
Android代码中判断是否为澎湃系统、获取澎湃系统版本号
/** * 是否为澎湃系统 * * @return true为澎湃系统 */public static boolean isHyperOs() { return ("Xiaomi".equalsIgnoreCase(android.os.Build.BRAND) && !TextUtils.isEmpty(getHyperVersion()));}/** * 获取澎湃系统版本号 * * @return 版本号 */public static Stri原创 2023-12-06 12:55:27 · 1065 阅读 · 3 评论 -
解决Build was configured to prefer settings repositories over project repositories编译报错的问题
Android编译时出现如下报错:Build was configured to prefer settings repositories over project repositories but repository 'maven' was added by build file 'build.gradle'原因是重复配置repositories导致的,所以解决方案就是删除多余的repositories定义,比如settings.gradle中的定义。可以全局搜索关键字:repositories,保原创 2023-10-11 19:59:57 · 8877 阅读 · 0 评论 -
解决No PSK available. Unable to resume编译报错的问题
如果使用jdk11编译Android工程时,出现如下报错:> Could not GET 'https://maven.aliyun.com/repository/public/com/test/open_sdk/1.0.0/open_sdk-1.0.0.pom'.> No PSK available. Unable to resume.可能的原因是jdk11版本过低,这是一个jdk11的已知bug:https://bugs.openjdk.java.net/browse/JDK-8213202原创 2023-10-11 19:47:20 · 1834 阅读 · 0 评论 -
设置DialogFragment背景透明
设置DialogFragment背景透明的方法如下:1.在onCreateView()方法中设置弹窗内部的背景透明。@Overridepublic View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) { // 设置弹窗内部的背景透明 getDialog().getWindow().setBackgroundDrawableResour原创 2023-08-18 14:01:54 · 1161 阅读 · 1 评论 -
解决Android8.0中透明Activity锁定方向崩溃问题
该问题为 Android 8.0 系统 bug。在 8.0 手机上,当应用 targetSdkVersion > 26 时,透明背景的 Activity 如果锁定了屏幕方向,打开该 Activity 就会触发必现的崩溃。触发具体条件为:①App的targetSdkVersion > 26。②Activity使用了透明属性的主题:Activity使用的 theme 中 windowIsTranslucent属性为true 或 windowIsFloating属性为true或未配置windowIsTrans原创 2023-08-18 13:51:46 · 1705 阅读 · 0 评论 -
AndroidManifest的activity标签中配置的theme属性的生效流程
AndroidManifest的activity标签中配置的theme属性的生效流程大体如下:1.android.content.pm.PackageParser.parseActivity()接口中读取AndroidManifest的activity标签中配置的theme属性,代码如下:a.info.theme = sa.getResourceId(R.styleable.AndroidManifestActivity_theme, 0);说明:① a.info为android.content原创 2023-08-11 19:54:08 · 505 阅读 · 0 评论 -
解决小米手机无法通过数据线安装app的问题
如果小米手机无法通过数据线安装app,并且有如下错误的情况:Installation did not succeed.The application could not be installed: INSTALL_FAILED_USER_RESTRICTEDList of apks:[0] '/Users/zhao/sw/workspace/demo/app/build/outputs/apk/debug/app-debug.apk'Installation via USB is disable原创 2023-07-05 16:48:26 · 1242 阅读 · 1 评论 -
Android源码在线查看的网站
如果想查看Android各个历史版本的源码,有如下几个网站可供参考:http://aospxref.com说明:包含Android 5.0~Android 13的源码,目前算是比较新的。搜索功能比较强大。推荐使用。http://androidxref.com/说明:包含Android 1.6~Android 9的源码,搜索功能比较强大。https://www.androidos.net.cn/sourcecode说明:包含Android 1.6~Android 10和Kernel 2.6.原创 2023-07-05 16:40:47 · 7383 阅读 · 0 评论 -
Android代码中判断当前App是否为64位
/** * 当前App是否为64位 * * @param context 上下文 * @return 当前App为64位返回true,反之返回false */public static boolean isApp64BitAbi(Context context) { try { String nativeLibraryDir = context.getApplicationInfo().nativeLibraryDir; int nextIndexOfL原创 2023-06-27 09:35:46 · 710 阅读 · 10 评论 -
解决No signature of method编译报错的问题
编译Android工程时,如果出现类似如下的错误:Build file '/Users/zhao/sw/workspace/myProject/app/build.gradle' line: 3A problem occurred evaluating project ':app'.> No signature of method: build_3iciaioon0bu97t06e9d2wjmp.android() is applicable for argument types: (build_3原创 2023-05-26 14:42:35 · 3302 阅读 · 0 评论 -
Android代码中判断so文件是否为64位
/** * 判断so文件是否为64位 * @param soFile so文件 * @return so文件为64位返回true,反之返回false */ public boolean isSo64BitAbi(File soFile) { RandomAccessFile randomAccessFile = null; try { randomAccessFile = new RandomAc原创 2023-05-24 09:19:25 · 580 阅读 · 0 评论 -
解决小米手机app调试时出现Installation via USB is disabled错误的问题
如果小米手机在app调试时无法安装,并且出现如下错误:Installation via USB is disabled.可以尝试如下步骤解决:设置->更多设置->开发者选项,滑动到页面底部,然后关闭选项:启动MIUI优化。原创 2023-05-23 10:09:50 · 1391 阅读 · 1 评论 -
取消三星手机的自动移动的蓝色框
当三星手机显示了自动移动的蓝色框时,通常是因为开启了某个辅助开关造成的。如果想取消这个蓝色框,可以尝试这样设置:设置-辅助功能-敏捷度和互动-通用开关,关闭开关即可。原创 2023-05-12 10:05:32 · 2376 阅读 · 0 评论 -
用adb命令查看Android手机支持的CPU ABI类型
获取当前Android手机支持的最高的CPU ABI类型:adb shell getprop ro.product.cpu.abi得到的可能是:arm64-v8a获取当前Android手机支持的所有CPU ABI类型:adb shell getprop ro.product.cpu.abilist得到的可能是:arm64-v8a,armeabi-v7a,armeabi原创 2023-05-11 16:13:16 · 1452 阅读 · 0 评论 -
Android中获取亮屏状态和监听亮屏和灭屏事件
package com.xiboliya.demo;import android.app.Activity;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.os.Build;import android.os.Bundle;import原创 2023-04-17 16:05:29 · 1146 阅读 · 0 评论 -
使用Animation实现组件闪烁
Animation可以实现组件的简单动画,例如:组件闪烁。实现步骤如下:TestActivity.javapackage com.xiboliya.demo;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.animation.AlphaAnimation;import android.view.animation.Animation;imp原创 2023-04-17 11:12:58 · 350 阅读 · 0 评论 -
使用Animation实现组件旋转
pivotX:旋转中心距离组件的左顶点的比例,50%表示旋转中心位于水平线正中。pivotY:旋转中心距离组件的上顶点的比例,50%表示旋转中心位于垂直线正中。Animation可以实现组件的简单动画,例如:组件旋转。repeatMode:重复模式,restart从头开始重复。repeatCount:旋转重复次数,-1为一直重复旋转。fromDegrees:从几度开始旋转。duration:时间,单位毫秒。toDegrees:旋转到几度。2.java文件实现动画。1.新建动画配置文件。原创 2023-04-10 18:38:38 · 655 阅读 · 0 评论 -
解决No toolchains found in the NDK toolchains folder for ABI with prefix: arm-linux-androideabi编译报错的问题
在编译Android代码库时,如果出现如下的错误:No toolchains found in the NDK toolchains folder for ABI with prefix: arm-linux-androideabi此错误与No version of NDK matched the requested version问题类似,只不过错误信息中没有明确的ndk版本号。上述错误一般在编译一个新的代码库或者引入一个新的依赖之后容易出现。而解决方案有如下几种:1.升级gradle版本。原创 2023-03-22 20:43:36 · 709 阅读 · 0 评论 -
解决Duplicate class xxx found in modules编译报错的问题
其实错误信息已比较明确,错误的原因是在com.mygroup.mylib:baselib1:1.0.1和com.mygroup.mylib:baselib2:1.0.0包里同时定义了com.mygroup.mylib.MyBean类,导致重复定义了,所以编译失败。解决方案也比较明确,就是去掉其中一个包的com.mygroup.mylib.MyBean类的定义。原创 2022-12-12 19:10:18 · 14027 阅读 · 0 评论 -
解决No version of NDK matched the requested version编译报错的问题
依次选择菜单:Tools->SDK Manager->SDK Tools,选中页面右下角的"Show Package Details"按钮,然后就可以看到"NDK(Side by side)"中的所有NDK版本了,选中对应的版本号,然后点击"OK"按钮进行安装即可。注:谷歌官网上的ndk版本不全,只有每个release版本的最终版,比如20的版本一共有2个:20.0.5594570、20.1.5948944,但是官网上只有20.1.5948944版本。5.谷歌官网中手动下载、安装对应的NDK版本。原创 2022-12-08 19:38:28 · 10690 阅读 · 0 评论 -
解决java.lang.SecurityException: Permission Denial: ... with revoked permission异常的问题
如果出现类似如下的异常问题:java.lang.SecurityException: Permission Denial: ... with revoked permission,说明app相应的某个系统权限没有开启,而直接调用了相关的接口,从而出现异常。解决方案就是添加动态权限申请的处理,只有开启了权限才调用相应的接口。例如以下问题就是因为没有开启相机权限,就调用了拍照的相关接口。所以需要添加相机权限的动态申请逻辑。原创 2022-09-15 19:54:29 · 4563 阅读 · 0 评论 -
解决跳转Activity时出现is not accessible from java.lang.Class<android.app.AppComponentFactory>异常的问题
【代码】is not accessible from java.lang.Class异常的问题。原创 2022-09-02 14:21:57 · 1821 阅读 · 1 评论 -
解决在子线程中显示Toast时出现Can‘t toast on a thread that has not called Looper.prepare异常的问题
如果在子线程中直接显示Toast:运行时就会出现如下异常:java.lang.RuntimeException: Can't toast on a thread that has not called Looper.prepare()原因是Android中不允许在子线程中处理UI。如果要在子线程中处理UI那就要动态转到主线程中执行,所以常用的3个解决方法如下:1.使用Looper。2.如果代码是在Activity中,可以使用runOnUiThread。3.使用rxjava。...原创 2022-06-30 15:06:32 · 5654 阅读 · 0 评论 -
Android项目打包发布到本地maven仓库
Android项目打包发布到本地maven仓库的方法如下:1.假设当前项目下有一个com.android.library类型的module,名为:mylib。在mylib/build.gradle文件中的开头和结尾分别添加如下配置即可:注:本地maven仓库的路径必须是一个绝对路径。◎如果要设置为当前工程中的路径,可以使用${rootDir}变量,${rootDir}变量表示当前工程的根目录。◎如果要设置为当前系统中的其他目录,在macOS或Linux中可以使用:/Users/username/原创 2022-06-15 14:51:59 · 4571 阅读 · 3 评论 -
Android Studio中查看和修改Android工程的编译jdk版本
Android Studio中查看和修改Android工程的编译jdk版本的方法可能并不固定,因为随着Android Studio的版本更新,其菜单位置经常发生变化。本文以macOS下Arctic Fox | 2020.3.1 Patch 1版本为例进行说明:File->Project Structure...->SDK Location->Gradle Settings->Gradle JDK。可以从这里查看当前的jdk版本,也可以从下拉列表中选择其他jdk版本。...原创 2022-05-23 20:35:10 · 11991 阅读 · 0 评论 -
Android Studio中R.java的文件路径
R.java是Android工程编译时自动生成的资源id索引文件,资源类型有很多,比如:anim、animator、array、attr、bool、color、dimen、drawable、id、integer、interpolator、layout、raw、string、style、styleable等。最常用的有:color、dimen、drawable、id、layout、string、style等。R.java的路径如下:app/build/generated/not_namespaced_r原创 2022-05-21 16:42:59 · 2507 阅读 · 0 评论 -
Android中解析简单的json字符串
Android中解析json的类库有不少,本文以谷歌的com.google.code.gson:gson库为例,介绍如何在不知道key的情况下,解析如下简单的json字符串。待解析的json字符串:{ "key11": "value11", "key12": "value12", "key13": "value13" }build.gradledependencies { implementation "com.google.code.gson:gson:2.8.6"}j原创 2022-03-29 18:18:32 · 3601 阅读 · 0 评论 -
在命令行中查看apk的签名信息
在命令行中查看apk的签名信息,命令如下:keytool -list -printcert -jarfile app.apk会在命令行打印出类似如下的信息:签名者 #1:签名:所有者: CN=xiboliya, OU="Qingdao Technology Co., Ltd.", O="Qingdao Technology Co., Ltd.", L=Qingdao, ST=Shandong, C=CN发布者: CN=xiboliya, OU="Qingdao Technology Co.,原创 2022-01-06 14:58:28 · 3599 阅读 · 0 评论 -
Android中的hook框架:epic简介
epic是Android中的一个开源的hook框架,目前最新版本是:0.11.2,项目地址:https://github.com/tiann/epic。epic框架的优点有:1.可以hook普通方法、构造方法、系统方法。2.手机系统无需root。集成方式如下:1.在项目主module的build.gradle中添加依赖:implementation 'com.github.tiann:epic:0.11.2'2.如果需要在app启动时就开始hook,请在Application的onCrea原创 2021-12-15 14:31:33 · 8227 阅读 · 21 评论 -
Android在通知栏中显示进度条
private NotificationManager notificationManager;private NotificationCompat.Builder builder;private NotificationClickReceiver notificationClickReceiver;public class DownloadManager {private static final String TAG = "DownloadManager";private Context .原创 2021-08-27 14:27:01 · 2767 阅读 · 0 评论