Android相关
火龙映天
javac MyJava.java↓
java MyJava↓
Hello World!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
手动排查so文件是否已经适配16KB对齐
谷歌商店已经在2025年11月1号开始限制所有上传的app必须适配16KB对齐,否则将无法发布。因此需要排查app中引入的so文件是否适配了16KB对齐。如果已经有so文件,想快速排查是否已经适配16KB对齐,可以尝试如下方法:1. Android ndk中已经包含检测so文件的工具:aarch64-linux-android-readelf,该文件在ndk的很多目录中都有,我们可以选择任意路径下的文件,以macOS系统为例:/Users/[username]/Library/Android/sd原创 2025-11-04 20:51:07 · 434 阅读 · 0 评论 -
创建GA4探索报告,查看埋点上报
Android App中接入com.google.firebase:firebase-analytics库,支持Firebase埋点后,如果需要查询某个点位的详细信息,需要创建GA4探索报告,方法如下:1.在GA4官网上:https://analytics.google.com/analytics/web/#/analysis/ 登录账号。2.点击页面左侧菜单:Explore,打开Explorations页面,点击页面顶部的Blank的+号按钮,新建一个空白的探索报告。3.在打开的空白报告页面的顶原创 2025-10-23 21:24:50 · 492 阅读 · 0 评论 -
解决Android进行targetSdk升级适配时hiddenapi-flags.csv文件下载失败问题
从Android9即targetSdk28开始,Android 平台对应用能使用的非 SDK 接口实施了限制。所以每次升级targetSdk时都需要根据最新的限制来排查整个app中的接口调用情况。而每个Android版本,准确来说是每个targetSdk版本都有一个特定的hiddenapi-flags.csv文件来定义非SDK接口限制。谷歌官网中有提供所有版本的hiddenapi-flags.csv文件下载链接,网页地址如下:https://developer.android.google.cn/guid原创 2025-09-19 19:15:42 · 483 阅读 · 0 评论 -
使用Android Studio中自带的手机投屏功能
Android Studio 从 Electric Eel 版本(代号:电鳗,即:2022.1.1版本)开始支持手机投屏功能。在 Android Studio Electric Eel 版本中,手机投屏功能是实验性功能,需要手动开启。具体路径为:Windows 系统下是 “File> Settings > Experimental”。Mac 系统下是 “Android Studio > Preferences > Experimental”。然后找到 “Enable mirroring of phy原创 2025-09-18 19:43:09 · 731 阅读 · 0 评论 -
Android中获取用户的国家码
Android海外版app中,通常会同时支持多个国家,就会有选择国家的需求。为了提升用户体验,可以自动识别用户所在的国家,以简化交互。下面代码的识别优先级依次为:SIM卡国家码、当前网络国家码、手机系统设置中的国家码。import android.content.Context;import android.content.res.Resources;import android.telephony.TelephonyManager;import android.text.TextUtils;原创 2025-09-17 19:55:28 · 299 阅读 · 0 评论 -
Android崩溃采集工具:xCrash适配16KB对齐
xCrash是一款开源的Android崩溃采集工具,其项目的GitHub地址为:https://github.com/iqiyi/xCrash。由于谷歌强制要求在2025.11.1之后上传的所有app都必须适配16KB对齐。而目前xCrash没有适配16KB对齐,并且此项目已经超过三年没有维护了。所以就需要我们自己来适配了,改动如下:基于官方最新tag:v3.1.0的代码进行修改:1.build.gradle中升级CMake版本:cmakeVersion = "3.18.1"2.xcra原创 2025-07-31 12:00:14 · 479 阅读 · 0 评论 -
解决Android Studio中创建的模拟器第二次无法启动的问题
Android Studio中创建的模拟器,首次启动时一切正常。但是关闭模拟器,下一次启动时一直显示:Connecting to the Emulator,无法启动。无法启动的原因通常是默认开启了模拟器的快速启动功能,首次启动时是“冷启动”,一切正常;但关闭时会保存一个“快照”,下次启动就从这个快照“热启动”恢复,如果快照损坏或保存异常,就会导致模拟器卡在启动界面,无法进入系统。此问题几乎是必现的,所以这算是Android Studio的一个bug,如果要正常启动模拟器,就需要冷启动,而不是热启动。原创 2025-07-31 09:32:51 · 520 阅读 · 0 评论 -
Android Studio历史版本下载方法
Android Studio最新稳定版本下载:https://developer.android.google.cn/studio?hl=zh-cn说明:此网址下载的版本是官方最新的稳定版本,并且是安装包格式的。例如:Windows系统为exe格式、macOS系统为dmg格式、Linux系统一般为deb。Android Studio历史版本下载:https://developer.android.google.cn/studio/archive说明:1.如果此网址打开后没有显示任何版本,则需原创 2025-05-23 10:01:32 · 2194 阅读 · 0 评论 -
解决使用PendingIntent.getBroadcast时出现java.lang.IllegalArgumentException异常的问题
当app为targetSdk31及以上,并且在Android12及以上系统中调用PendingIntent.getBroadcast(context, 0, intent, 0)接口时会抛出异常:java.lang.IllegalArgumentException: com.haier.uhome.uplus.seasia: Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be原创 2025-04-08 19:55:09 · 414 阅读 · 0 评论 -
安装adb命令行工具
1.浏览器打开如下链接:https://developer.android.com/tools/releases/platform-tools?按照电脑系统选择对应的工具下载,本文选择:下载适用于 Mac 的 SDK Platform-Tools。2.下载成功后,得到一个压缩包:platform-tools-latest-darwin.zip,将此压缩包解压到合适的位置,比如:/Users/pc/sw/setup/program/platform-tools,然后将此目录配置到PATH环境变量中。原创 2025-04-07 19:28:27 · 600 阅读 · 0 评论 -
AGP与Android Studio版本的兼容对照表
注:此对照表来源于官方的:https://developer.android.com/build/releases/gradle-plugin?通常配置在Android工程的根build.gradle中,例如:classpath 'com.android.tools.build:gradle:7.0.4'。AGP与Android Studio版本的兼容对照表。原创 2025-03-27 13:13:22 · 1610 阅读 · 0 评论 -
AGP与Gradle版本的兼容对照表
AGP:全称为Android Gradle Plugin,或称Android Gradle插件。通常配置在Android工程的根build.gradle中,例如:classpath 'com.android.tools.build:gradle:7.0.4'。Gradle版本:通常配置在gradle-wrapper.properties中,例如:distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-all.zip。原创 2025-03-27 12:56:34 · 3330 阅读 · 0 评论 -
Android代码中获取系统默认WebView浏览器内核版本
【代码】Android代码中获取系统默认WebView浏览器内核版本。原创 2025-03-12 11:57:38 · 444 阅读 · 0 评论 -
解决No matching client found for package name xxx编译报错的问题
但是google-services.json文件是从谷歌后台下载的,所以通常不修改此文件,而是修改app包名。修改app包名或修改google-services.json中package_name属性与app包名一致。原创 2025-02-14 17:14:41 · 529 阅读 · 0 评论 -
Android中获取so文件来源于哪个库
如果你不确定该怎么写,也可以Rebuild工程,然后在Build选项卡中的输出信息中查找关键字:NativeLibs,看到类似:Task :xxx:merge***NativeLibs的打印,其中merge***NativeLibs就是我们想要的取值。Android app中可能有很多的.so文件,有时我们不确定这些.so文件都是来源于哪些库的,可以通过在build.gradle中添加代码来统计。首先Clean Project,然后Run app。原创 2025-02-14 16:05:19 · 1119 阅读 · 1 评论 -
Android中解决Button组件英文全部自动大写的问题
从Android5.0开始Button组件的textAllCaps属性默认为true,意为将英文字符全部转为大写。而Android5.0之前的系统默认为false,不会自动转换大写。原创 2025-02-12 17:18:12 · 707 阅读 · 0 评论 -
Android中获取系统屏幕高度和宽度的方法
/** * 获取应用实际可使用的屏幕高度,不包括系统状态栏和导航栏等系统UI占用的空间 * @return 应用实际可使用的屏幕高度,单位:像素 */ private int getDisplayHeight() { WindowManager windowManager = (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE); Displa原创 2025-02-12 14:22:41 · 498 阅读 · 0 评论 -
从Intent中获取所有参数的key和value
从Intent中获取所有参数的key和value的方法如下:Activity1页面中创建Intent对象,添加参数,并跳转Activity2页面:Intent intent = new Intent();intent.putExtra("key1", "value1");intent.putExtra("key2", "value2");intent.putExtra("key3", 100);intent.setClass(this, Activity2.class);this.start原创 2024-09-27 17:13:26 · 610 阅读 · 0 评论 -
Android中为文本添加下划线、删除线、加粗效果
Android中如果要为文本添加下划线、删除线、加粗效果的话,需要在代码中执行:TextView txtTest = findViewById(R.id.txt_test);txtTest.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG); // 删除线txtTest.getPaint().setFlags(Paint.UNDERLINE_TEXT_FLAG); // 下划线txtTest.getPaint().setFlags(Paint.FAKE原创 2024-09-27 16:34:50 · 1055 阅读 · 0 评论 -
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 · 1397 阅读 · 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 · 971 阅读 · 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 · 1846 阅读 · 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 · 803 阅读 · 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 · 667 阅读 · 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 · 867 阅读 · 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 · 1009 阅读 · 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 · 10335 阅读 · 0 评论 -
Activity去掉默认动画效果
Activity无论是否设置style主题,默认都是有动画效果的。如果要去掉默认的动画效果,只需要在原有主题的基础上添加一个属性:windowAnimationStyle,并设置为@null即可。具体步骤如下:1. styles.xml中添加主题: @null原创 2024-05-06 12:54:17 · 941 阅读 · 0 评论 -
查看Android系统默认WebView浏览器内核版本
首先了解2个概念:1.Android系统默认WebView浏览器内核版本:是指Android的app中如果直接使用WebView组件加载网页的话,所使用的浏览器内核。这个浏览器来源于Android系统,app端无法修改。2.系统内置的浏览器应用的内核版本:是指Android系统中内置的名叫"浏览器"的app中所使用的浏览器内核。而这个"浏览器"app虽然是系统内置的,但是其本质上跟用户自己安装的app没有太大区别。所以此app可能使用了自定义的浏览器,所以其与系统默认浏览器内核版本可能不同。了解了上原创 2024-04-11 20:30:38 · 8836 阅读 · 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 · 2014 阅读 · 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 · 21711 阅读 · 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 · 2838 阅读 · 0 评论 -
设置DialogFragment背景透明
设置DialogFragment背景透明的方法如下:1.在onCreateView()方法中设置弹窗内部的背景透明。@Overridepublic View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) { // 设置弹窗内部的背景透明 getDialog().getWindow().setBackgroundDrawableResour原创 2023-08-18 14:01:54 · 1624 阅读 · 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 · 2816 阅读 · 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 · 727 阅读 · 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 · 2268 阅读 · 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 · 8679 阅读 · 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 · 870 阅读 · 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 · 4443 阅读 · 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 · 764 阅读 · 0 评论
分享