![](https://img-blog.csdnimg.cn/20190902180729112.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Android相关
火龙映天
javac MyJava.java↓
java MyJava↓
Hello World!
展开
-
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 · 192 阅读 · 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 · 833 阅读 · 0 评论 -
Activity去掉默认动画效果
Activity无论是否设置style主题,默认都是有动画效果的。如果要去掉默认的动画效果,只需要在原有主题的基础上添加一个属性:windowAnimationStyle,并设置为@null即可。具体步骤如下:1. styles.xml中添加主题: @null原创 2024-05-06 12:54:17 · 360 阅读 · 0 评论 -
查看Android系统默认WebView浏览器内核版本
首先了解2个概念:1.Android系统默认WebView浏览器内核版本:是指Android的app中如果直接使用WebView组件加载网页的话,所使用的浏览器内核。这个浏览器来源于Android系统,app端无法修改。2.系统内置的浏览器应用的内核版本:是指Android系统中内置的名叫"浏览器"的app中所使用的浏览器内核。而这个"浏览器"app虽然是系统内置的,但是其本质上跟用户自己安装的app没有太大区别。所以此app可能使用了自定义的浏览器,所以其与系统默认浏览器内核版本可能不同。了解了上原创 2024-04-11 20:30:38 · 2136 阅读 · 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 · 843 阅读 · 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 · 6390 阅读 · 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 · 1608 阅读 · 0 评论 -
设置DialogFragment背景透明
设置DialogFragment背景透明的方法如下:1.在onCreateView()方法中设置弹窗内部的背景透明。@Overridepublic View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) { // 设置弹窗内部的背景透明 getDialog().getWindow().setBackgroundDrawableResour原创 2023-08-18 14:01:54 · 1050 阅读 · 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 · 1450 阅读 · 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 · 463 阅读 · 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 · 1073 阅读 · 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 · 7080 阅读 · 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 · 647 阅读 · 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 · 2991 阅读 · 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 · 514 阅读 · 0 评论 -
解决小米手机app调试时出现Installation via USB is disabled错误的问题
如果小米手机在app调试时无法安装,并且出现如下错误:Installation via USB is disabled.可以尝试如下步骤解决:设置->更多设置->开发者选项,滑动到页面底部,然后关闭选项:启动MIUI优化。原创 2023-05-23 10:09:50 · 1134 阅读 · 1 评论 -
取消三星手机的自动移动的蓝色框
当三星手机显示了自动移动的蓝色框时,通常是因为开启了某个辅助开关造成的。如果想取消这个蓝色框,可以尝试这样设置:设置-辅助功能-敏捷度和互动-通用开关,关闭开关即可。原创 2023-05-12 10:05:32 · 1979 阅读 · 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 · 1311 阅读 · 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 · 1069 阅读 · 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 · 326 阅读 · 0 评论 -
使用Animation实现组件旋转
pivotX:旋转中心距离组件的左顶点的比例,50%表示旋转中心位于水平线正中。pivotY:旋转中心距离组件的上顶点的比例,50%表示旋转中心位于垂直线正中。Animation可以实现组件的简单动画,例如:组件旋转。repeatMode:重复模式,restart从头开始重复。repeatCount:旋转重复次数,-1为一直重复旋转。fromDegrees:从几度开始旋转。duration:时间,单位毫秒。toDegrees:旋转到几度。2.java文件实现动画。1.新建动画配置文件。原创 2023-04-10 18:38:38 · 639 阅读 · 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 · 686 阅读 · 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 · 13747 阅读 · 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 · 10293 阅读 · 0 评论 -
解决java.lang.SecurityException: Permission Denial: ... with revoked permission异常的问题
如果出现类似如下的异常问题:java.lang.SecurityException: Permission Denial: ... with revoked permission,说明app相应的某个系统权限没有开启,而直接调用了相关的接口,从而出现异常。解决方案就是添加动态权限申请的处理,只有开启了权限才调用相应的接口。例如以下问题就是因为没有开启相机权限,就调用了拍照的相关接口。所以需要添加相机权限的动态申请逻辑。原创 2022-09-15 19:54:29 · 4393 阅读 · 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 · 1754 阅读 · 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 · 5318 阅读 · 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 · 4282 阅读 · 1 评论 -
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 · 11574 阅读 · 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 · 2387 阅读 · 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 · 3586 阅读 · 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 · 3551 阅读 · 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 · 8098 阅读 · 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 · 2629 阅读 · 0 评论 -
Android中解决Bad notification posted from package packagename导致的崩溃问题
当app启动时出现崩溃,并且有如下错误日志:android.app.RemoteServiceException: Bad notification posted from package com.test.hm: Couldn't create icon: StatusBarIcon(icon=Icon(typ=RESOURCE pkg=com.test.hm id=0x7f0808ae) visible user=0 )这就说明在显示Notification通知时由于无法加载图标,而导致的崩溃。这原创 2021-08-24 15:02:14 · 2582 阅读 · 0 评论 -
解决Android Studio中安装app失败并出现INSTALL_FAILED_DUPLICATE_PERMISSION异常的问题
在Android Studio中运行安装app时,如果安装失败,并有如下异常:Installation did not succeed.The application could not be installed: INSTALL_FAILED_DUPLICATE_PERMISSION这说明自定义的permission权限与系统中已安装的app冲突,因为从Android 5.0开始不允许两个签名不同的app定义相同的permission。所以解决方案就是:修改permission定义,不要与已有a原创 2021-08-23 15:59:36 · 3922 阅读 · 2 评论 -
Android代码中判断是否为鸿蒙系统、获取鸿蒙系统版本号
/** * 是否为鸿蒙系统 * * @return true为鸿蒙系统 */public static boolean isHarmonyOs() { try { Class<?> buildExClass = Class.forName("com.huawei.system.BuildEx"); Object osBrand = buildExClass.getMethod("getOsBrand").invoke(buildExClass).原创 2021-08-23 14:12:33 · 6174 阅读 · 4 评论 -
Android代码中获取系统版本号
import android.os.Build;import android.util.Log;public class Test { private static final String TAG = Test.class.getSimpleName(); private void getSystemVersions() { // 系统API版本号-数字格式,例如:29,亦即表示Android API level 29 int version = Build.VERSIO..原创 2021-08-23 14:05:03 · 2410 阅读 · 0 评论 -
Android代码中解析apk文件
Android代码中可以解析本地的apk文件,包括包名、版本名称、版本号等。代码如下:public void analysisApk(Context context, File file) { if (file == null || !file.exists()) { return; } PackageManager pm = context.getPackageManager(); PackageInfo info = pm.getPackageAr原创 2021-08-18 19:53:44 · 988 阅读 · 0 评论 -
Observable.timer延时执行
Observable.timer方法可以延时执行自定义的逻辑,常用方法如下:/** * 延时执行 * * @param delay 延时执行的时间 * @param unit 时间单位 * @return Observable对象 */public static Observable<Long> timer(long delay, TimeUnit unit)/** * 延时执行 * * @param delay 延时执行的时间 * @param unit 时间单原创 2021-08-16 10:14:25 · 6314 阅读 · 0 评论