[TOC]
Android Studio
Android Studio 真机测试
第一步:打开手机USB调试 首先,打开手机”设置->>我的设备->>全部参数->>MIUI版本”,连续点击7次,进入开发者模式。 其次,”设置->>更多设置->>开发者选项”,打开“USB调试”和“USB安装”.
第二步:设置Android studio 打开Android studio工程,”Run->>Edit configurations”如下图位置,选择“Open Select Deployment Target Dialog”,这个是每次在调试时弹出设备选择框。注意:如果直接选择“USB Device”的话,可能调试时会找到不到手机设备.
项目结构
Project模式下目录:
.gradle 和 .idea 主要放置的都是 Android studio 自动生成的一些文件。
app 项目的代码资源等内容都在这个目录
gradle 包含 gradle wrapper 的配置文件
.gitignore 用来将指定的目录或文件排除在版本控制之外的
build.gradle 这是项目全局的 gradle 构建脚本。
gradle.properties 这个文件是全局的gradle的配置文件,在这里配置的属性将会影响到项目中所有的gradle编译脚本。
gradlew 和 gradlew.bat 这两个文件是用来在命令行中执行 gradle 命令的,其中 gradlew 是在 Linux 和 macOS 系统中使用,而 gradlew.bat 是在Windows 系统中使用。
local.properties 用来指定本机中的 Android sdk 路径,通常内容都是自动生成,我们并不需要修改。
settings.gradle 用于指定项目中所有引入的模块,通常情况下模块的引入都是自动完成的,需要我们手动去修改的这个文件的场景可能比较少。
.iml .iml文件是所有 IntelliJ IDEA 项目都会自动生成的一个文件,用于标识这是一个IntelliJ IDEA项目,我们不需要修改这个文件中的任何内容。
App目录下的结构:
build 主要是包含了一些在编译中自动生成的文件。
libs 如果你的项目中使用了第三方jar包,就需要把这些jar包都放在libs目录下,放在这个目录下的jar包都会被自动添加到构建路径里去。
src子目录:
androidTest 用来编写 Android Test 测试用例的,可以对项目进行一些自动化测试。
java 放置java代码的地方
res 为 resource 的缩写,界面 UI 相关资源,也就是非程序代码的资源,如 layout、图像与文本。
AndroidManifest.xml 整个 Android 项目的配置文件,在程序中自定义的所有四大组件都需要在这个文件里注册,另外还可以在这个文件中给应用程序添加权限声明。
test 用来编写 Unit Test测试用例的,是对项目进行自动化测试的另一种方式。
.gitignore 用来将指定的目录或文件排除在版本控制之外的。
build.gradle 这是app模块的gradle构建脚本,这个文件中会指定很多项目构建相关的配置。
proguard-rules.pro 这个文件用于指定项目代码的混淆规则,当代码开发完成后打开安装包文件,如果不希望代码被别人破解,通常会将代码进行混淆,从而让破解者难以阅读。
AVD(Android Virtual Device)
安装 apk 时报错:
The APK failed to install.
Error: INSTALL_FAILED_NO_MATCHING_ABIS
The APK failed to install.
Error: Could not parse error string
产生原因: 为了让AVD获取最佳运行速度,AS在安装AVD时往往会建议使用与你的pc机相同的cpu架构,即默认为x86架构,而apk使用的是ARM架构,这就造成了不兼容。
解决方法:
- 在AS中安装一个ARM架构的AVD。
- 编译成apk时,可以在选项中将程序修改为x86。
Android Hook
Android Runtime (运行时)
JVM
Java Virtual Machine
,缩写为JVM,Java虚拟机,一种能够运行Java字节码的虚拟机。
Dalvik
Dalvik
是 Android 移动设备平台的核心组成部分之一。它可以支持已转换为 .dex
(dex, Dalvik Executable)格式的Java应用程序的运行。.dex
格式是专为 Dalvik 设计的一种压缩格式,适合内存和处理器速度有限的系统。
在app安装到手机之后,系统运行dexopt程序对dex进行优化,将dex的依赖库文件和一些辅助数据打包成odex文件。存放在 cache/dalvik_cache
目录下。保存格式为 apk路径 @ apk名 @ classes.dex
。这样以空间换时间大大缩短读取/加载dex文件的过程。
ART
Android Runtime(缩写为ART),是一种在 Android 操作系统上的运行环境,由 Google 公司研发,并在2013年作为 Android 4.4 系统中的一项测试功能正式对外发布,在 Android 5.0 及后续Android版本中作为正式的运行时库取代了以往的Dalvik虚拟机。ART能够把应用程序的字节码转换为机器码,是Android所使用的一种新的虚拟机。
Android 开发
Android 保持屏幕常亮
Java:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
Kotlin:
window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
Android获取和设置屏幕亮度
在Androidmanifast.xml中添加如下权限:
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
获取屏幕亮度的 Kotlin 代码:
var screenBrightness: Float = window.attributes.screenBrightness
设置屏幕亮度的 Kotlin 代码:
private fun changeSystemBrightness(brightness: Float) {
if (hasPermissionsToWriteSettings(this)) {
//已获取权限
val lp = window.attributes
lp.screenBrightness = brightness
window.attributes = lp
} else {
//拒绝了权限
val intent = with(Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS)) {
data = Uri.parse("package:$packageName")
this
}
startActivityForResult(intent, 100)
}
}
private fun hasPermissionsToWriteSettings(context: Activity): Boolean {
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
Settings.System.canWrite(context)
} else {
ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_SETTINGS) == PackageManager.PERMISSION_GRANTED
}
}
安卓角标数字
安卓应用的角标是由Launcher支持的,而原生的Android系统Launcher并没有提供角标支持,所以各大手机厂商只能自己定制Launcher来实现,然后提供接口给外部使用。
Android 8.0 及之后的版本Google官方API支持通过发送系统通知的方式设置应用角标,但是不支持显示数量,而是一个小圆点。
- 安卓应用角标那些事儿 - 简书
- 2020年android 最新的角标适配方案_炭烤葫芦娃的博客-CSDN博客_android 角标适配
- leolin310148/ShortcutBadger: An Android library supports badge notification
Android 获取手机厂商、系统版本等信息
private fun getAppVersionCode(): Long {
val versionCodde: Long =
// avoid huge version numbers and you will be ok
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
packageManager.getPackageInfo(packageName, 0).longVersionCode
} else {
packageManager.getPackageInfo(packageName, 0).versionCode.toLong()
}
return versionCodde
}
获取手机名称:
String phoneName = android.os.Build.MODEL;
获取系统SDK版本号:
int phoneSDK = Build.VERSION.SDK_INT;
获取手机系统版本号:
String phoneVersion = android.os.Build.VERSION.RELEASE;
android.os.Build.BOARD:获取设备基板名称
android.os.Build.BOOTLOADER:获取设备引导程序版本号
android.os.Build.BRAND:获取设备品牌
android.os.Build.CPU_ABI:获取设备指令集名称(CPU的类型)
android.os.Build.CPU_ABI2:获取第二个指令集名称
android.os.Build.DEVICE:获取设备驱动名称
android.os.Build.DISPLAY:获取设备显示的版本包(在系统设置中显示为版本号)和ID一样
android.os.Build.FINGERPRINT:设备的唯一标识。由设备的多个信息拼接合成。
android.os.Build.HARDWARE:设备硬件名称,一般和基板名称一样(BOARD)
android.os.Build.HOST:设备主机地址
android.os.Build.ID:设备版本号。
android.os.Build.MODEL :获取手机的型号 设备名称。
android.os.Build.MANUFACTURER:获取设备制造商
android:os.Build.PRODUCT:整个产品的名称
android:os.Build.RADIO:无线电固件版本号,通常是不可用的 显示unknown
android.os.Build.TAGS:设备标签。如release-keys 或测试的 test-keys
android.os.Build.TIME:时间
android.os.Build.TYPE:设备版本类型 主要为"user" 或"eng".
android.os.Build.USER:设备用户名 基本上都为android-build
android.os.Build.VERSION.RELEASE:获取系统版本字符串。如4.1.2 或2.2 或2.3等
android.os.Build.VERSION.CODENAME:设备当前的系统开发代号,一般使用REL代替
android.os.Build.VERSION.INCREMENTAL:系统源代码控制值,一个数字或者git hash值
android.os.Build.VERSION.SDK:(已弃用)系统的API级别,请使用 SDK_INT 来查看
android.os.Build.VERSION.SDK_INT:系统的API级别 数字表示
隐藏Android模拟器的虚拟按键
原理 修改system下的build.prop文件内的参数
修改方法
1.找到指定的AVD模拟器的配置文件,一般路径如下: [用户根目录]/.android/avd/ [模拟器名字].avd/config.ini 2.将下面两个属性改为yes即可
hw.dPad = yes
hw.mainKeys = yes
安卓App上架
注:不得不佩服国内的安卓市场,除了华为应用市场被拒后能回复和申诉,其它市场就是一个消息通知,真的一言难尽!
apk签名
用指定的 keystore 签名apk:
jarsigner -verbose -keystore xxx.jks -signedjar xxx_signed.apk xxx.apk alias_key
注:最后一个参数是 keyalias,也就是该签名文件的别名。