Android
qiuchangyong
这个作者很懒,什么都没留下…
展开
-
Android 代码混淆Proguard
在Android的具体表现就是打包时,将项目里的包名、类名、变量名根据混淆规则进行更改,使反编译工具反编译出来的代码人难以阅读,从而达到防止被逆向破解的目的。Android代码混淆,又称Android混淆,是伴随着Android系统的流行而产生的一种APP保护技术,用于保护APP不被破解和逆向分析。proguardFiles用于指定混淆规则,自动使用默认的混淆规则,而我们可以在proguard-rules.pro中自定义自己的混淆规则。压缩代码,删除无用的代码,简单的代码重命名,都可以减少Apk体积。转载 2024-03-19 00:33:59 · 134 阅读 · 0 评论 -
Fragment lifecycle
Each Fragment instance has its own lifecycle. When a user navigates and interacts with your app, your fragments transition through various states in their lifecycle as they are added, removed, and enter or exit the screen.To manage lifecycle, implements L转载 2024-02-26 20:10:41 · 123 阅读 · 0 评论 -
Android获取屏幕分辨率的代码
【代码】Android获取屏幕分辨率的代码。原创 2024-01-30 23:10:22 · 523 阅读 · 0 评论 -
TextView的setTextSize与xml中android:textSize属性值的对应关系
android中,对TextView设置文本字体大小,是通过在layout xml中设置android:textSize的属性值实现的,比如设置“24sp”,这里的sp是一种单位,其他可选的单位还有px,dip(dp),pt,in,mm,建议使用sp。如果要在代码中设置文本字体大小,会用到setTextSize,传入一个float的值,那么这个float值的单位是什么呢?原来默认是sp,如果要设置以其他单位的size,就要用到带两个参数的setTextSize,原创 2024-01-29 00:26:36 · 1093 阅读 · 0 评论 -
安卓下Application和Activity的Context获取
补充:要在Fragement或View中获得Application的Context,先参考情形二和情形三得到Activity或Activity的Context,再参考情形一得到Application的Context。getApplicationContext()获得Application的Context,结果一样。getContext()得到的是一样的,都是Activity的Context。Application,其本身也是一个的Context,也可以通过。是Activity的Context。原创 2023-12-26 16:09:10 · 1222 阅读 · 0 评论 -
我的南京 保存图片 找不到
如题,“我的南京”是一款城市办事的APP,通过它可以查询到各类信息后保存图片,发现在“文件管理”中找不到。琢磨了一番,没想到是由于应用的读写存储空间权限关了导致的,这样图片保存不了。但APP报的提示却是“图片已保存至XXXX.PNG”,这就很具有误导性了,应该报的提示为“保存图片失败,请打开存储空间权限”这样的。打开改应用的存储空间权限后,就能正常保存图片了,用USB的“图片传输”就能看到手机的DCIM和Pictures目录,图片保存在Pictures目录下。原创 2023-11-20 23:36:52 · 85 阅读 · 0 评论 -
JNI的三种引用
函数返回后,局部引用所引用的对象(如果Java层没有对返回的局部引用使用)会被JVM自动释放,或调用DeleteLocalRef释放。实际上,每当线程从Java环境切换到本地代码上下文时(J2N),JVM会分配一块内存,创建一个局部引用表,这个表用来存放本次本地方法执行中创建的所有的局部引用。调用NewWeakGlobalRef基于局部引用或全局引用创建,不会阻止GC回收所引用的对象,可以跨方法、跨线程使用。1、JNI会将创建的局部引用都存储在一个局部引用表中,该局部引用表的最大数量是512。转载 2023-11-15 01:57:34 · 84 阅读 · 0 评论 -
JNI调用c/c++,env->和(*env)->是有区别的
ps: jni代码,如果.c文件中用 “env->” 编译会找不到此结构,必须用“(*env)->”,或者改成.cpp文件,以 c++的方式来编译。想不起来jni中的env调用方法还有两种写法。如果是c程序,要用 (*env)->如果是C++要用 env->转载 2023-11-12 23:09:01 · 148 阅读 · 0 评论 -
Android.mk使用简介(以PREBUILT_SHARED_LIBRARY和BUILD_SHARED_LIBRARY扩展描述)
用来指定一个预先已经编译好的动态库,与BUILD_SAHRED_LIBRARY和BUILD_STATIC_LIBRARY不同,该模块对应的LOCAL_SRC_FILES不能是源文件,而只能是一个已经编译好的的动态库的路径,如foo/libfoo.so。该变量指向一个构建脚本并收集所有通过LOCAL_XXX变量指定的关于当前模块的信息,并根据你所列出的源文件构建一个动态库(.so)使用该变量前,你应该至少定义了LOCAL_MODULE和LOCAL_SRC_FILES。包含了构建该模块的源文件列表。转载 2023-10-30 00:20:49 · 1576 阅读 · 0 评论 -
Android中assets和raw的区别详解
注意1:Google的Android系统处理Asset有个bug,在AssetManager中不能处理单个超过1MB的文件,不然会报异常,raw没这个限制可以放个4MB的Mp3文件没问题。注意2:assets 文件夹是存放不进行编译加工的原生文件,即该文件夹里面的文件不会像 xml, java 文件被预编译,可以存放一些图片,html,js, css 等文件。1.res/raw中的文件会被映射到R.java文件中,访问的时候直接使用资源ID即R.id.filename;原创 2023-11-06 00:24:00 · 459 阅读 · 0 评论 -
AndroidManifest.xml文件简介
每个应用项目必须在的根目录中加入文件(且必须使用此名称)。清单文件会向 Android 构建工具、Android 操作系统和 Google Play 描述应用的基本信息。如果您使用构建应用,则系统会为您创建清单文件,并在您构建应用时(尤其是在使用时)添加大部分基本清单元素。转载 2023-11-05 23:50:42 · 1937 阅读 · 0 评论 -
A TextureView or a subclass can only be used with hardware acceleration enabled.
这样编译的apk被认为是使用的版本号很低,就会出现一系列问题,还会出现弹框提示“此应用专为旧版Android打造,可能无法正常运行。所以需要删除AndroidManifest.xml中的SDK版本号指定而改为在build.gradle中指定SDK版本号。onSurfaceTextureAvailable无法被调用,getSurfaceTexture返回的也是null。android:targetSdkVersion="SDK版本号" />琢磨了半天,才意识到是项目迁移时指定的sdk版本问题导致的。原创 2023-10-27 10:53:31 · 142 阅读 · 0 评论 -
Key GNUSTL_STATIC is missing in the map.
externalNativeBuild下的cmake下的arguments选项里多了'-DANDROID_STL=gnustl_static',把这个去掉,编译就能成功了。可能是目前的ndk版本已经不支持老版本ndk中的某些宏定义所导致的。编译旧的Android工程时,出现如题的错误。这是由于build.gradle中的。原创 2023-10-17 19:46:12 · 366 阅读 · 0 评论 -
禁用小米手机系统应用的方法
所幸提供了这个命令“pm list packages”,而使用“am monitor”或者“dumpsys window w |grep \/ |grep name=”也能找到包名。有时候我们想要删除对我们无用的已安装的应用,长按应用图标,进行卸载即可。但这个只对非系统应用有效,如果是系统内建的应用,就无法卸载,这是很令人恼火的。但通过pm命令可以禁用它,禁用后在launcher里面就看不见了,如果想要恢复显示也可以使用命令进行恢复。禁用命令:pm disable-user com.miui.video。原创 2023-05-01 03:06:46 · 2306 阅读 · 0 评论 -
安卓手机微信接收文件保存到哪了?
我们在使用微信的时候,别人传了一个文件过来,可以直接打开查看,或者选择“另存为...”保存起来,当我们点击打开文件的时候,文件就会下载到本地,我们通过在文件夹上右键,选择“在文件夹中显示”,会看到文件被保存到“C:\Users\你的用户名\Documents\WeChat Files\你的微信id\FileStorage\File\年-月”的目录下,后期要清理还是查找都能方便操作。原本我以为是存放在“tencent\MicroMsg”目录下的,后来发现不是。原创 2023-02-24 17:15:04 · 31204 阅读 · 0 评论 -
安卓App抓包经验谈
通常要将抓包保存为pcap文件,在电脑上使用wireshark打开分析,可使用命令:tcpdump -i eth0 host 47.100.116.9 -s 0 -c 100 -nn -w /sdcard/1.pcap,这表示抓取经过网卡eth0的,来自或发往主机47.100.116.9的100个网络包,保存到文件/sdcard/1.pcap,这里-s 0表示抓取完整包,-nn表示不显示抓包过程的打印信息。选择真机的好处在于App运行正常,因为是真实环境嘛,不像模拟器,有的App检测环境时,可能会闪退。原创 2023-02-19 02:11:09 · 2664 阅读 · 0 评论 -
Android Studio 的过往版本
本页面列出了 Android Studio 之前的每个主要版本的新功能和改进。如需了解最新版本的新功能,请参阅当前的。如需了解与发布版本有关的最新资讯(包括每个预览版中的重要修正的列表),请参阅。如需了解 Android Gradle 插件中的新变化,请参阅其。转载 2022-11-21 14:46:57 · 11632 阅读 · 1 评论 -
安装谷歌服务框架2022最新版本22.45.15失败
谷歌play服务框架下载安装安卓版-谷歌服务框架2022最新版本(Google Play 服务)下载22.45.15官方手机版-蜻蜓手游网 (qt6.com)这其实是说,我的设备的sdk版本不够新导致的。一般都是新的sdk版本兼容旧的sdk开发的应用,反之不行。原创 2022-11-17 22:21:35 · 2767 阅读 · 0 评论 -
Android中实现录制内置声音
Android中实现对内置声源的录制有两种方案。转载 2022-09-08 15:52:32 · 3640 阅读 · 0 评论 -
adb devices后出现设备offline的解决方法
如题,有时候android设备通过usb接上电脑,通过adb安装应用时,提示offline,该如何处理?重新插拔usb也不行,也不是设备的usb驱动未安装导致的。解决方法就是重启adb server。原创 2022-08-30 18:23:02 · 5544 阅读 · 0 评论 -
Android中使用System.out.println打印的内容如何用logcat查看
如题,System.out.println常常用于java中打印输出信息,在控制台可以看到。然而,它也可以用在Android中,那么如何通过logcat查看它呢?也许你没有想到,竟然用logcat也能查看?答案为是的。查看打印信息的命令如下:adb logcat -s System.out...原创 2022-05-06 11:05:56 · 2809 阅读 · 0 评论 -
Android相机支持的预览格式详解
当我们想从相机的预览中拿到原始的图像用于处理,我们就要先设置相机的参数,让它输出我们期望的格式。本篇文档旨在解释清楚相机支持的预览格式,相机默认预览格式。随便找了一台Android手机,通过log输出,看个究竟。先打印相机支持的预览格式:Log.d(TAG, "SupportedPreviewFormats:"+mCamera.getParameters().getSupportedPreviewFormats().toString());输出的结果是:[842094169, 17],这实际原创 2022-04-24 19:40:19 · 2646 阅读 · 0 评论 -
编译ExoPlayer扩展模块av1遇到的问题及解决
ExoPlayer使用libgav1模块实现av1的解码,编译av1这个扩展模块后,得到的是aar文件。本人在编译的过程中遇到两个小问题,后来解决了,现记录如下:问题一:Android Studio报错:Invalid revision: 3.18.1-g262b901-dirty解决办法:删掉或移走Android Sdk安装目录下的cmake目录下的3.18.1目录,不使用这个版本的cmake问题二:提示gav1_jni.cc文件中的random未定义解决办法:这是未包含c++11的产生随原创 2022-04-07 01:20:46 · 2644 阅读 · 0 评论 -
Android WakeLock使用的一个注意点
先看看下面这个函数写的有没有问题?public void wakeUpTest(Context context) { PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, "awakelock"); wl.acquire();}.原创 2022-03-07 20:58:34 · 2345 阅读 · 0 评论 -
AudioManager.setStreamVolume的flags参数可选值
以下摘自AudioManager.java,flags参数可选值可以为0或以下的组合// Flags should be powers of 2!/** * Show a toast containing the current volume. * * @see #adjustStreamVolume(int, int, int) * @see #adjustVolume(int, int) * @see #setStreamVolume(int, int, int) * @see #.原创 2021-12-07 16:27:05 · 1877 阅读 · 0 评论 -
adb remount的使用
如果要删除或者修改/system目录下的东西(一些frameworks编译出来的so和系统app都位于该目录下),就需要将/system部分置于可写入的模式,默认情况下 /system部分是只读模式的。第一步这个命令只适用于已被 root 的设备,如果没有root,就要执行adb root命令将其root。在将文件push到/system目录之前,必须先输入命令 'adb remount','adb remount' 的作用相当于 'adb shell mount -o rw,remount,rw /sys原创 2021-11-27 18:15:45 · 5024 阅读 · 0 评论 -
CMake编译ndk项目时找不到android_gradle_build.json的解决办法
在CMakeLists.txt的同级目录下,存在.cxx目录,这是Android Studio产生的文件,不是源文件。在入库时,不需要添加,比如git仓库管理源码时,可在.gitignore文件里加上“/.cxx”,这样一来,在编译这个ndk项目时就会出现找不到android_gradle_build.json的错误。莫急,只需对该项目依次执行,Build菜单下的三个操作:其中第二步是产生.cxx目录下的文件的。由于ndk编译要选择ABI,所以还要注意一下,Build Variants里的Act原创 2021-11-27 17:47:02 · 2521 阅读 · 0 评论 -
模拟键盘输入adb shell input
>adb shell inputUsage: input [<source>] <command> [<arg>...]The sources are: dpad keyboard mouse touchpad gamepad touchnavigation joystick touchscreen stylus trackballThe...转载 2021-11-25 21:58:35 · 3511 阅读 · 0 评论 -
Android的网络状态判断
获取网络信息需要在AndroidManifest.xml文件中加入相应的权限。<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />1)判断是否有网络连接public boolean isNetworkConnected(Context context) { if (context != null) { ConnectivityManager mC转载 2021-11-23 21:52:18 · 2878 阅读 · 0 评论 -
Android获得IMEI和IMSI号
IMEI是International Mobile Equipment Identity的缩写,国际移动设备识别码。手机序列号,保存在手机的EEPROM里。public String getIMEI(Context context) { String imei = "null"; try { TelephonyManager tm = (TelephonyManager) context.getSystemService(TELEPHONY_SERVIC...原创 2021-11-05 19:14:49 · 3529 阅读 · 0 评论 -
Android通话应用设计
目录Android通话应用设计 1一、 背景 1二、 应用框架设计 1三、 常驻进程开机唤醒 21. Phone进程 22. TelecomServer进程 3四、 应用间进程交互 61.进程交互方式 62. Binder交互过程 6五、 通话流程 71.拨号流程 82.电话状态更新流程 93.用户挂断电话流程 104.来电流程 11六、 主要设计模式 121.命令模式+观察者模式的复合使用 132. MVP模式 133....转载 2021-10-28 20:52:38 · 839 阅读 · 0 评论 -
Android下的一个打log的java类
package com.example.yourapp.util;import android.content.Context;import android.os.Environment;import android.util.Log;import java.io.BufferedWriter;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import j.原创 2021-10-29 01:00:00 · 162 阅读 · 0 评论 -
Camera2之CameraManager类
ICS13.310 A91 中 华 人 民 共 和 国 国 家 标 准 GB/T28181—2016 代替 GB/T28181—2011 公共安全视频监控联网系统 信息传输、交换、控制技术要求 Technicalrequirementsforinformationtransport,switch andcontrolinvideosurveillancenetworksystemforpublicsecurity 2016-07-12发布 2016-08-01实施 中华人民共和国国家质量监督检验检疫总局 中转载 2021-06-17 18:55:23 · 1201 阅读 · 0 评论 -
SurfaceView和TextureView的用法比较
以Android Camera1为例1.事件监听前者调用SurfaceHolder.addCallback(SurfaceHolder.Callback),后者调用Camera.setSurfaceTextureListener(TextureView.SurfaceTextureListener)2.预览显示前者调用Camera.setPreviewDisplay(SurfaceHolder)或Camera.setPreviewSurface(Surface),后者调用Camera.set原创 2021-10-26 16:29:42 · 993 阅读 · 0 评论 -
AndroidX Overview
Artifacts within theandroidxnamespace comprise theAndroid Jetpacklibraries. Like the Support Library, libraries in theandroidxnamespace ship separately from the Android platform and provide backward compatibility across Android releases.AndroidX is...转载 2021-08-13 17:12:43 · 80 阅读 · 0 评论 -
创建android app不显示标题栏
如何在创建android app的时候不显示标题栏,可以在加载界面布局之前,使用:requestWindowFeature(Window.FEATURE_NO_TITLE);但这个其实很鸡肋,对AppCompat的主题是无效的。所以最好做法还是修改主题。从AppCompatActivity继承的Activity要不显示标题栏,就不显示actionbar,在AndroidManifest.xml文件的application标签里加入一个属性:android:theme="@style/Theme.原创 2021-07-24 15:24:39 · 803 阅读 · 1 评论 -
Android布局 ScrollView滚动界面
scrollView称为滚动视图,是当在一个屏幕的像素显示不下的时候,可以采用滑动的方式,显示在UI上。scrollView的基本滚动屏幕作用在xml布局页面上就可实现,不需java代码。其他功能可在代码中设置。<ScrollView android:id="@+id/id_scrollView" android:layout_width="match_parent" android:layout_height="wrap_content"> 。。。。。转载 2021-03-26 11:29:27 · 356 阅读 · 2 评论 -
The getTestClassesDir() method has been deprecated and is scheduled to be removed in Gradle 5.0.
android studio,sync project with gradle files时报这个错误,原因是gradle和gradle插件版本过旧,更换更高的版本可以解决。但这个问题只是提示,不影响编译。原创 2021-03-18 13:52:14 · 6575 阅读 · 0 评论 -
Android Studio格式化代码的方法
先将光标定位在需要格式化代码的文件中,再选择菜单的code -> Reformat Code,这就可以了。原创 2021-03-18 11:35:18 · 3620 阅读 · 0 评论 -
Android:Gradle,Gradle命令和配置
前言上一期我们熟悉了:Gradle是什么,怎样和AS配合使用。链接:https://blog.csdn.net/u011287967/article/details/80883661这一期我们来看看Gradle命令和配置。本文环境:window 10, as 3.1.3,gradleplugin 3.1.3,gradle 4.4。1,环境变量当没有配置环境变量时,只能执行命令 "gradlew xxxxxx";配置方法:系统属性-->环境变量-->path (我的路.转载 2021-03-16 15:30:04 · 451 阅读 · 0 评论