Android 笔记:AndroidTrain , Lint , build

SimpleCursorAdapter(Context context, int layout, Cursor c, String[] from, int[] to)

  • This constructor was deprecated in API level 11. This option is discouraged, as it results in Cursor queries being performed on the application’s UI thread and thus can cause poor responsiveness or even Application Not Responding errors. As an alternative, use LoaderManager with a CursorLoader.

SimpleCursorAdapter(Context context, int layout, Cursor c, String[] from, int[] to, int flags)

  • Standard constructor.

项目 res/ 目录内支持的资源目录:

| 目录 | 资源类型 |

| — | — |

| animator/ | 用于定义属性动画的 XML 文件。 |

| anim/ | 定义渐变动画的 XML 文件。(属性动画也可以保存在此目录中,但是为了区分这两种类型,属性动画首选 animator/ 目录。) |

| mipmap/ | 适用于不同启动器图标密度的 Drawable 文件 |

| raw/ | 要以原始形式保存的任意文件。要使用原始 InputStream 打开这些资源,请使用资源 ID(即 R.raw.filename)调用 Resources.openRawResource()。但是,如需访问原始文件名和文件层次结构,则可以考虑将某些资源保存在 assets/ 目录下(而不是 res/raw/)。assets/ 中的文件没有资源 ID,只能使用 AssetManager 读取这些文件D。 |

| color/ | 用于定义 颜色状态列表XML文件。 |

| xml/ | 可以在运行时通过调用 Resources.getXML() 读取的任意 XML 文件。各种 XML 配置文件(如可搜索配置)都必须保存在此处。 |

**注意:**切勿将资源文件直接保存在 res/ 目录内,这会导致出现编译错误。

创建别名资源

如果您想将某一资源用于多种设备配置(但是不想作为默认资源提供),则无需将同一资源放入多个备用资源目录中。 相反,您可以(在某些情况下)创建备用资源,充当保存在默认资源目录下的资源的别名。

注:并非所有资源都会提供相应机制让您创建指向其他资源的别名。 特别是,xml/ 目录中的动画资源、菜单资源、原始资源以及其他未指定资源均 不提供 此功能。

例如,假设您有一个应用图标 icon.png,并且需要不同区域设置的独特版本。 但是,加拿大英语和加拿大法语这两种区域设置需要使用同一版本。 您可能会认为需要将相同的图像复制到加拿大英语和加拿大法语对应的资源目录中,但事实并非如此。 相反,您可以将用于二者的图像另存为 icon_ca.png(除 icon.png 以外的任何名称),并将其放入默认 res/drawable/ 目录中。然后,在 res/drawable-en-rCA/res/drawable-fr-rCA/ 中创建 icon.xml 文件,使用 <bitmap> 元素引用 icon_ca.png资源。这样,您只需存储 PNG 文件的一个版本和两个指向该版本的小型 XML 文件。(XML 文件示例如下:)

1. Drawable

要创建指向现有 Drawable 的别名,请使用 元素。例如:

<?xml version="1.0" encoding="utf-8"?>

<bitmap xmlns:android=“http://schemas.android.com/apk/res/android”

android:src=“@drawable/icon_ca” />

如果将此文件另存为 icon.xml(例如,在备用资源目录中,另存为 res/drawable-en-rCA/),则会编译到可作为 R.drawable.icon 引用的资源中,但实际上它是 R.drawable.icon_ca 资源(保存在 res/drawable/ 中)的别名。

2. 布局

要创建指向现有 布局的别名,请使用包装在 <merge> 中的 <include>元素。例如:

<?xml version="1.0" encoding="utf-8"?>

如果将此文件另存为 main.xml,则会编译到可作为 R.layout.main 引用的资源中,但实际上它是 R.layout.main_ltr 资源的别名。

3. 字符串和其他简单值

要创建指向现有字符串的别名,只需将所需字符串的资源 ID 用作新字符串的值即可。例如:

<?xml version="1.0" encoding="utf-8"?>

Hello

@string/hello

R.string.hi 资源现在是 R.string.hello 的别名。

其他简单值的原理相同。 例如,颜色:

<?xml version="1.0" encoding="utf-8"?>

#f00

@color/red

访问资源


编译应用时,aapt 会生成 R 类,其中包含您的 res/ 目录中所有资源的资源 ID。 每个资源类型都有对应的 R 子类(例如,R.drawable 对应于所有 Drawable 资源),而该类型的每个资源都有对应的静态整型数(例如,R.drawable.icon)。这个整型数就是可用来检索资源的资源 ID。

注意:res/ 读取资源的唯一方法是使用资源 ID

// Set the Activity title by getting a string from the Resources object, because

// this method requires a CharSequence rather than a resource ID

getWindow().setTitle(getResources().getText(R.string.main_title));

// Set a slide in animation by getting an Animation from the Resources object

mFlipper.setInAnimation(AnimationUtils.loadAnimation(this,

R.anim.hyperspace_in));


引用样式属性

您可以通过样式属性资源在当前应用的风格主题中引用某个属性的值。 通过引用样式属性,您可以不采用为 UI 元素提供硬编码值这种方式,而是通过为 UI 元素设置样式,使其匹配当前风格主题提供的标准变型来定制这些元素的外观。引用样式属性的实质作用是,“在当前风格主题中使用此属性定义的样式”。

要引用样式属性,名称语法几乎与普通资源格式完全相同,只不过将 at 符号 (@) 改为问号 (?),资源类型部分为可选项。 例如:

?[<package_name>:][<resource_type>/]<resource_name>

例如,您可以通过以下代码引用一个属性,将文本颜色设置为与系统风格主题的“主要”文本颜色匹配:

<EditText id=“text”

android:layout_width=“fill_parent”

android:layout_height=“wrap_content”

android:textColor=“?android:textColorSecondary”

android:text=“@string/hello_world” />

在以上代码中,android:textColor 属性表示当前风格主题中某个样式属性的名称。Android 现在会使用应用于 android:textColorSecondary 样式属性的值作为 android:textColor 在这个小工具中的值。由于系统资源工具知道此环境中肯定存在某个属性资源,因此您无需显式声明类型(类型应为 ?android:attr/textColorSecondary)— 您可以将 attr 类型排除在外。

使用Lint排除潜在的问题


Lint是Google专门为Android推出的代码检查工具,可以在编译期发现APP中潜在的问题。

菜单栏中Analyze -> Inspect Code 开始检查代码,项目越大耗时越长。

检查完成会自动打开Inspection窗口并显示结果,如下图所示:

这里写图片描述

我们重点来看一下Android Lint:

这里写图片描述

build.gradle文件


build.gradle文件结构

AS中APP所有的配置尽在一个build.gradle文件中,打包的时候也是解析build.gralde文件来打包的。结构如下所示:

这里写图片描述

  1. apply plugin 用来指定用的是哪个插件
  • com.android.application:Android APP插件(打包得到的是.apk文件)

  • com.android.library:Android库插件(打包得到的是.aar文件)

  1. android 用来指定Android打包插件的相关属性
  • compileSdkVersion(apiLevel):设置编译时用的Android版本

  • buildToolsVersion(buildToolsVersionName):设置编译时使用的构建工具的版本

  • defaultConfig:设置一些默认属性,其可用属性是 buildTypesProductFlavors 之和

  • sourceSets:配置相关源文件的位置,当你的项目的目录结构跟默认的有区别但又不想改的时候sourceSets就派上用场了

  • aidl 设置aidi的目录

  • assets 设置assets资源目录

  • compileConfigurationName The name of the compile configuration for this source set.

  • java Java 源代码目录

  • jni JNI代码目录

  • jniLibs 已编译好的JNI库目录

  • manifest 指定清单文件

  • name The name of this source set.

  • packageConfigurationName The name of the runtime configuration for this source set.

  • providedConfigurationName The name of the compiled-only configuration for this source set.

  • renderscript Renderscript源代码目录

  • res 资源目录

  • setRoot(path) 根目录

  • signingConfigs:配置签名信息

  • keyAlias 签名的别名

  • keyPassword 密码

  • storeFile 签名文件的路径

  • storePassword 签名密码

  • storeType 类型

  • buildTypes:配置构建类型,可打出不同类型的包。默认有 debugrelease 两种,你还可以在增加N种。

  • applicationIdSuffix 用于修改 applicationId,在默认 applicationId 的基础上加后缀。在 buildType 中修改 applicationId 时只能加后缀,不能完全修改。

  • debuggable 设置是否生成debug版的APK

  • jniDebuggable 设置生成的APK是否支持调试本地代码

  • minifyEnabled 设置是否执行混淆

  • multiDexEnabled Whether Multi-Dex is enabled for this variant.

  • renderscriptDebuggable 设置生成的APK是否支持调试RenderScript代码

  • renderscriptOptimLevel 设置RenderScript优化级别

  • signingConfig 设置签名信息

  • versionNameSuffix 修改版本名称,在默认版本名称的基础上加后缀。在buildType中修改版本名称时只能加后缀,不能完全修改

  • zipAlignEnabled 设置是否对APK包执行ZIP对齐优化

  • proguardFile(proguardFile) 添加一个混淆文件

  • proguardFiles(proguardFileArray) 添加多个混淆文件

  • setProguardFiles(proguardFileIterable) 设置多个混淆文件

  • productFlavors:配置不同风格的APP,在buildTypes的基础上还可以让每一个类型的APP拥有不同的风格,所以最终打出的APK的数量就是buildTypes乘以productFlavors

  • applicationId 设置应用ID

  • multiDexEnabled Whether Multi-Dex is enabled for this variant.signingConfig Signing config used by this product flavor.

  • testApplicationId 设置测试时的应用ID

  • testFunctionalTest See instrumentation.

  • testHandleProfiling See instrumentation.

  • testInstrumentationRunner Test instrumentation runner class name.

  • versionCode 设置版本号

  • versionName 设置版本名称

  • minSdkVersion(int minSdkVersion) 设置兼容的最小SDK版本

  • minSdkVersion(String minSdkVersion) 设置兼容的最小版本

  • proguardFile(proguardFile) 添加一个混淆文件

  • proguardFiles(proguardFileArray) 添加多个混淆文件

  • setProguardFiles(proguardFileIterable) 设置多个混淆文件

  • targetSdkVersion(int targetSdkVersion) 设置目标SDK版本

  • targetSdkVersion(String targetSdkVersion) 设置目标SDK版本

  • testOptions:设置测试相关属性

  • reportDir 设置测试报告的目录

  • resultsDir 设置测试结果的目录

  • aaptOptions:设置AAPT的属性

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
img

最后

这里附上上述的技术体系图相关的几十套腾讯、头条、阿里、美团等公司2021年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。

相信它会给大家带来很多收获:

img

上述高清技术脑图以及配套的架构技术PDF可以点击我的GitHub免费获取

当程序员容易,当一个优秀的程序员是需要不断学习的,从初级程序员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。早早确定自己的职业方向,才能在工作和能力提升中甩开同龄人。

  • 无论你现在水平怎么样一定要 持续学习 没有鸡汤,别人看起来的毫不费力,其实费了很大力,这四个字就是我的建议!!!
  • 我希望每一个努力生活的IT工程师,都会得到自己想要的,因为我们很辛苦,我们应得的。

当我们在抱怨环境,抱怨怀才不遇的时候,没有别的原因,一定是你做的还不够好!

大家展示一部分。

相信它会给大家带来很多收获:

[外链图片转存中…(img-gguSK84G-1710768325743)]

上述高清技术脑图以及配套的架构技术PDF可以点击我的GitHub免费获取

当程序员容易,当一个优秀的程序员是需要不断学习的,从初级程序员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。早早确定自己的职业方向,才能在工作和能力提升中甩开同龄人。

  • 无论你现在水平怎么样一定要 持续学习 没有鸡汤,别人看起来的毫不费力,其实费了很大力,这四个字就是我的建议!!!
  • 我希望每一个努力生活的IT工程师,都会得到自己想要的,因为我们很辛苦,我们应得的。

当我们在抱怨环境,抱怨怀才不遇的时候,没有别的原因,一定是你做的还不够好!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值