下一步就是配置一些设置并创建新项目。主要的配置有如下这些:指定项目名称;指定软件包名称。默认情况下,此软件包名称也会成为你的应用 ID。此名称以后可以更改;指定项目的本地保存位置;选择你希望 Android Studio 在为新项目创建示例代码时使用的语言;选择你希望应用支持的最低 API 级别。当你选择较低的 API 级别时,你的应用可以依赖的现代 Android API 会更少,但能够运行应用的 Android 设备的比例会更大。当选择较高的 API 级别时,情况正好相反;如果你选择的项目类型通过 Google Play 免安装体验支持免安装体验,并且你希望为该应用启用这种体验,请选中 This project will support instant apps 旁边的复选框;如果你希望项目默认使用 AndroidX 库,请选中 Use AndroidX artifacts 旁边的复选框。AndroidX 库是 Android 支持库的改进替换;准备好创建项目后,点击 Finish。至此,我们新建完成了一个 Android 项目。
在前几小节中我们学习了使用模拟器,本节课程我们学习如何使用真机测试应用。任何一款应用务必始终先在真机设备上测试后再正式向用户发布。
本部分会学习 Android SDK 包中的命令行工具。虽然很多工作我们都能在 Android Studio 中直接完成,但是对命令行工具的学习和使用会加深我们的理解,而且部分工具仅提供了命令行版本。
如果我们的项目需要一个或多个特定版本的 NDK,我们可以下载并配置特定版本。这样做有助于确保在每个项目都依赖于特定版本的 NDK 的情况下,项目之间的编译可重现。Android Studio 会将所有版本的 NDK 安装到 android-sdk/ndk/ 目录中。要安装特定版本的 NDK,请执行以下操作:打开项目后,依次点击 Tools > SDK Manager。点击 SDK Tools 标签页。选中 Show Package Details 复选框。选中 NDK (Side by side) 复选框及其下方与我们要安装的 NDK 版本对应的复选框。Android Studio 会将所有版本的 NDK 安装到 android-sdk/ndk/ 目录中。点击 OK。此时系统会显示一个对话框,告诉我们 NDK 软件包占用了多少空间。点击 OK。安装完成后,点击 Finish。
Android 模拟器除了需要满足 Android Studio 的基本系统要求之外,还需要满足下述其他要求:SDK Tools 26.1.1 或更高版本;64 位处理器;HAXM 6.2.1 或更高版本(建议使用 HAXM 7.2.0 或更高版本)。要在 Windows 和 Linux 上使用硬件加速,还需要满足以下其他要求:在 Windows 或 Linux 上搭载 Intel 处理器:Intel 处理器需要支持 Intel VT-x、Intel EM64T (Intel 64) 和 Execute Disable (XD) Bit 功能;在 Linux 上搭载 AMD 处理器:AMD 处理器需要支持 AMD 虚拟化 (AMD-V) 和 Supplemental Streaming SIMD Extensions 3 (SSSE3);在 Windows 上搭载 AMD 处理器:需要 Android Studio 3.2 或更高版本以及 2018 年 4 月发布的支持 Windows Hypervisor Platform (WHPX) 功能的 Windows 10 或更高版本。如需与 Android 8.1(API 级别 27)及更高版本的系统映像配合使用,连接的摄像头必须能够捕获 720p 的帧。
在我们点击 Apply Changes and Restart Activity 或 Apply Code Changes 后,Android Studio 会构建新 APK 并确定是否可以应用更改。如果无法应用更改并且会导致 Apply Changes 失败,则 Android Studio 会改为提示我们重新运行您的应用。不过,如果我们不想在每次发生这种情况时都收到提示,则可以将 Android Studio 配置为在无法应用更改时自动重新运行您的应用。要启用此行为,请按以下步骤操作:打开 Settings 或 Preferences 对话框:在 Windows 或 Linux 上,从菜单栏中依次选择 File > Settings。在 macOS 上,从菜单栏中依次选择 Android Studio > Preferences。依次转到 Build, Execution, Deployment > Deployment。选中复选框以针对任一 Apply Changes 操作启用自动 Run fallback。点击 OK。
本部分会学习如何高效的使用 Android Studio 来编写代码。如何高效的编排界面布局。如何合理的管理项目资源。开发 Android 应用就是编排界面、编写代码的过程。
我们除了自己从头开始写代码之外,Android Studio 还为我们提供了众多遵循 Android 设计与开发最佳做法的代码模板,我们可以使用这些模板创建新的应用模块、各种 Activity 或者其他特定的 Android 项目组件。我们要使用模板添加 Android 项目组件,需要将项目切换到 Project 视图,右键点击想要在其中添加新组件的文件夹,然后选择 New。根据点击的文件夹可以添加的组件,我们会看到一个模板类型列表:Tips:从上图可以看到模板类型包括:AIDL、Activity、Service、Widget 等等。在选择想要添加的模板时,对应的向导窗口将出现并要求提供组件的配置信息,例如名称。在我们输入配置信息后,Android Studio 将为新组件创建并打开文件,它还会运行 Gradle 构建来同步我们的项目。
本章主要介绍一种比 AVD 性能更好甚至可以跟真机媲美的 Android 模拟器,更适用于一些大型项目的调试工作。好了,到这里你已经完成了学前准备,下面就可以进行项目开发了,下一章我们将一起创建第一个 Android 项目,加油!
如果你学习过 C/C++ 或者 Java 开发应该很熟悉main()函数,没错,一切代码都是从main()函数开始的。在 Android 中也有类似的概念,每个 Android 应用程序都有一个主 Activity(启动 Activity),而其中的onCreate()方法就是所有代码的起点。
Android Studio 为许多常用操作都提供了默认的键盘快捷键。下面按不同的功能模块对默认快捷键进行了归纳整理。Tips:由于 Android Studio 基于 IntelliJ IDEA,因此我们可以在 IntelliJ IDEA 按键映射参考文档中找到其他快捷方式。
如果在线查找示例遇到了网络问题,则我们可以下载示例代码后手动导入到 Android Studio 中。Google 把优质的示例代码都托管到了 GitHub 上,所以我们按如下步骤操作:从 GitHub 上 下载 Google Samples 代码:在 Android Studio 中 Import Project:
Android Studio 可以为 Project 窗口中显示的某些项创建运行/调试配置。如需为项目中的某个项创建运行/调试配置,请按以下步骤操作:在 Android 或 Project 视图中打开一个项目;在 Project 窗口中,右键点击某个可测试项,然后选择 Run 文件名 或 Debug 文件名。Android Studio 会创建一个临时的运行/调试配置并启动我们的应用;从工具栏的 Select Run/Debug Configuration 下拉列表中选择 Save。
今天来学习另一种比较专业的存储方式——数据库,在 Android 中引入了一个轻量级的数据库框架:SQLite。如果你对数据库非常熟悉,那它可以全面支持数据的 SQL 语言,同时也提供了 Java 接口方便不太熟悉数据库的 Android 工程师使用。
我们可以使用 Android Studio 界面将 Gradle 关联到外部 CMake 或 ndk-build 项目:从 IDE 左侧打开 Project 窗格,然后选择 Android 视图。右键点击我们想要关联到原生库的模块(例如 app 模块),然后从菜单中选择 Link C++ Project with Gradle。从下拉菜单中,选择 CMake 或 ndk-build。如果选择 CMake,请使用 Project Path 旁的字段为我们的外部 CMake 项目指定 CMakeLists.txt 脚本文件。如果选择 ndk-build,请使用 Project Path 旁的字段为我们的外部 ndk-build 项目指定 Android.mk 脚本文件。如果 Application.mk 文件与我们的 Android.mk 文件位于同一目录下,Android Studio 也会包含此文件。点击 OK。
下面我们加上一些高级属性,可以做出不同寻常的效果:<TextView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:padding="20dp" android:shadowColor="#5919C9" android:shadowDx="20.0" android:shadowDy="20.0" android:shadowRadius="4.5" android:text="跟着超哥学Android" android:textColor="#BECF0B" android:textSize="40sp" />我们在第一个 demo 的基础之上加上了阴影效果,如图:
要管理 Android Studio 用于检查 Android 工具和第三方工具更新的 SDK 网站,请点击 SDK Update Sites 标签。我们可以添加其他提供自有工具的网站,然后从这些网站下载软件包。例如,某个软件提供商可能会为其自有基于 Android 系统的设备提供额外的 API 库。要使用他们的库开发应用,我们可以在 SDK Update Sites 标签中将其 SDK 工具网址添加到 SDK 管理器,以安装他们的 Android SDK 软件包。如果软件提供商在其网站上提供了 SDK 附加项代码库文件,请按照以下步骤将其网站添加到 Android SDK 管理器:点击 SDK Update Sites 标签;点击窗口右侧的 Add 图标 ;输入第三方网站的名称和网址,然后点击 OK;确保已选中 Enabled 列中相应的复选框;点击 OK 完成。此时该网站提供的所有 SDK 软件包都将视情况显示在 SDK Platforms 或 SDK Tools 标签页中。
要查看项目的实际文件结构(包括在 Android 视图中隐藏的所有文件),就需要使用 Project 视图。在 Project 视图下的项目结构如下:build:包含构建输出;libs:包含专用库;src:包含相应模块在以下子目录中的所有代码和资源文件;androidTest:包含在 Android 设备上运行的插桩测试的代码。如需了解详情,请参阅 Android 测试文档;main:包含“主”源集文件:所有构建变体共享的 Android 代码和资源;AndroidManifest.xml:描述应用及其各个组件的性质;java:包含 Java 代码来源;res:包含应用资源,例如可绘制对象文件、布局文件和界面字符串。详情请参阅应用资源;test:包含在主机 JVM 上运行的本地测试代码;build.gradle(模块):这定义了特定于模块的构建配置;build.gradle(项目):这定义了适用于所有模块的构建配置。了解了项目的结构之后,我们可以动手尝试新建一个 Android 项目了。
本节介绍了 Android UI 中作为鼻祖的两个类,所有可视的 UI 控件都是从 View 继承而来,而这些 View 的排列布局方式则有 ViewGroup 来组合管理,而编写布局可以通过代码或者 XML 的两种形式,后者更加简洁直观。其实大家在实际的开发中,很少会去直接使用这两个类, Android 源码已经为我们提供了各式各样丰富的控件和布局,几乎可以应对我们日常开发的大多数场景,在后面的课程我们会学习到很多 Android 提供的优秀的控件和布局类,大家务必要在教程中学好 Android 原生的控件、布局,为今后学习编写自定义 View 打下坚实的基础。
从 Android 视图打开在左侧的 Project > Android 面板中,依次选择 ModuleName > res > values;右键点击 strings.xml 文件,然后选择 Open Translations Editor。从 strings.xml 中打开我们可以从任一 strings.xml 文件中访问 Translations Editor。在左侧的 Project > Android 面板中,依次选择 ModuleName > res > values;双击 strings.xml 将其打开,以供修改;在 strings.xml 中,点击右上角的 Open editor 链接。从 Design Editor 中打开我们可以从 Layout Editor 的 Design Editor 中打开 Translations Editor,以修改默认译文,使其更好地匹配我们的布局。在左侧的 Project > Android 面板中,依次选择 ModuleName > res > layout;双击 activity_main.xml 以将其打开进行修改;点击左下角的 Design 标签页以显示 Design Editor;在 Design Editor 中,选择 Language 下拉列表;选择 Edit Translations 图标 。
在命令行中构建应用,我们使用的是 Gradle 封装容器,它可作为 Windows 的批处理文件 (gradlew.bat) 和 Linux 与 Mac 的 shell 脚本 (gradlew) 使用,而且我们可以从使用 Android Studio 创建的每个项目的根目录启动该工具。我们可以使用 Gradle 封装容器命令行工具执行 Android 项目可用的所有构建任务。要使用封装容器运行任务,请在终端窗口中(在 Android Studio 中,依次选择 View > Tool Windows > Terminal)使用下列命令之一:在 Windows 上:gradlew task-name在 Mac 或 Linux 上:./gradlew task-nameTips:task-name是代指具体的 Gradle 任务名称。如需查看项目的所有可用构建任务的列表,请执行如下命令:gradlew tasks输出结果如下:------------------------------------------------------------Tasks runnable from root project------------------------------------------------------------Android tasks-------------androidDependencies - Displays the Android dependencies of the project.signingReport - Displays the signing info for the base and test modulessourceSets - Prints out all the source sets defined in this project.Build tasks-----------assemble - Assemble main outputs for all the variants.assembleAndroidTest - Assembles all the Test applications.build - Assembles and tests this project.buildDependents - Assembles and tests this project and all projects that depend on it.buildNeeded - Assembles and tests this project and all projects it depends on.bundle - Assemble bundles for all the variants.clean - Deletes the build directory.cleanBuildCache - Deletes the build cache directory.compileDebugAndroidTestSourcescompileDebugSourcescompileDebugUnitTestSourcescompileReleaseSourcescompileReleaseUnitTestSourcesextractDebugAnnotations - Extracts Android annotations for the debug variant into the archive fileextractReleaseAnnotations - Extracts Android annotations for the release variant into the archive fileBuild Setup tasks-----------------init - Initializes a new Gradle build.wrapper - Generates Gradle wrapper files.Cleanup tasks-------------lintFix - Runs lint on all variants and applies any safe suggestions to the source code.Help tasks----------buildEnvironment - Displays all buildscript dependencies declared in root project 'FirstApp'.components - Displays the components produced by root project 'FirstApp'. [incubating]dependencies - Displays all dependencies declared in root project 'FirstApp'.dependencyInsight - Displays the insight into a specific dependency in root project 'FirstApp'.dependentComponents - Displays the dependent components of components in root project 'FirstApp'. [incubating]help - Displays a help message.model - Displays the configuration model of root project 'FirstApp'. [incubating]projects - Displays the sub-projects of root project 'FirstApp'.properties - Displays the properties of root project 'FirstApp'.tasks - Displays the tasks runnable from root project 'FirstApp' (some of the displayed tasks may belong to subprojects).Install tasks-------------installDebug - Installs the Debug build.installDebugAndroidTest - Installs the android (on device) tests for the Debug build.uninstallAll - Uninstall all applications.uninstallDebug - Uninstalls the Debug build.uninstallDebugAndroidTest - Uninstalls the android (on device) tests for the Debug build.uninstallRelease - Uninstalls the Release build.Verification tasks------------------check - Runs all checks.connectedAndroidTest - Installs and runs instrumentation tests for all flavors on connected devices.connectedCheck - Runs all device checks on currently connected devices.connectedDebugAndroidTest - Installs and runs the tests for debug on connected devices.deviceAndroidTest - Installs and runs instrumentation tests using all Device Providers.deviceCheck - Runs all device checks using Device Providers and Test Servers.lint - Runs lint on all variants.lintDebug - Runs lint on the Debug build.lintRelease - Runs lint on the Release build.lintVitalRelease - Runs lint on just the fatal issues in the release build.test - Run unit tests for all variants.testDebugUnitTest - Run unit tests for the debug build.testReleaseUnitTest - Run unit tests for the release build.
如本节标题所言,Android 系统中的所有 UI 类都是建立在 View 和 ViewGroup 两个类的基础之上的,所有 View 的子类称为 Widget(控件),所有 ViewGroup 的子类称为 Layout(布局),在 Android 源码中继承关系如下图所示:可以看到,在 Android 的 UI 中,View 是所有类的基类,我们通过实现 View 来完成各种具体的UI展示;而由 View 派生的 ViewGroup 是所有 Layout 的基类,它将各种不同的 View 组合到一起,以下是 View 的组合关系图:
Android SDK 为我们提供了 Android 模拟器,我们可以很方便的将我们开发的程序随时在模拟器上进行测试,一个 AVD 可以支持硬件配置、系统镜像、屏幕尺寸、外观、SD 卡等,在创建的同时可以制定模拟设备的硬件属性,甚至可以创建多个模拟器同时进行测试。在 Eclipse 菜单栏中依次点击 Windows -> Android visual Device Manager,在弹窗中就可以根据自己的需要创建相应配置的模拟器了。创建完成之后,启动模拟器,接下来就可以像操作手机一样操作模拟器了。
Android Studio 安装包的官方下载地址是 https://developer.android.google.cn/studio#downloads
Android 应用程序概括的说可以分为代码和资源两部分,在 Android Studio 中把项目代码在 Project 视图中展开,可以看到在 main 层级下面有 java 和 res 两个目录,java 目录内存放的是项目代码,res 目录内存放的是项目资源。我们就分别学习下如何创建代码和如何添加资源。
下载 USB 驱动程序后,请按照下面的说明操作,根据 Windows 版本以及是首次安装还是升级现有驱动程序,安装或升级驱动程序。Windows 10要在 Windows 10 系统上首次安装 Android USB 驱动程序,请执行以下操作:将 Android 设备连接到计算机的 USB 端口;在 Windows 资源管理器中,打开计算机管理;在计算机管理左侧窗格中,选择设备管理器;在设备管理器右侧窗格中,找到并展开便携式设备或其他设备,具体取决于看到的是哪一项;右键点击已连接设备的名称,然后选择更新驱动程序软件;在硬件更新向导中,选择浏览计算机以查找驱动程序软件,然后点击下一步;点击浏览,然后找到 USB 驱动程序文件夹。例如,Google USB 驱动程序位于 android_sdk\extras\google\usb_driver\;点击下一步以安装驱动程序。Windows 7要在 Windows 7 系统上首次安装 Android USB 驱动程序,请执行以下操作:将 Android 设备连接到计算机的 USB 端口;从桌面上或 Windows 资源管理器中右键点击计算机,然后选择管理;在左侧窗格中选择设备;在右侧窗格中找到并展开其他设备;右键点击相应的设备名称(如 Xiaomi),然后选择更新驱动程序软件。这将启动硬件更新向导;选择浏览计算机以查找驱动程序软件,然后点击下一步;点击浏览,然后找到 USB 驱动程序文件夹。(Google USB 驱动程序位于 android_sdk\extras\google\usb_driver\。)点击下一步以安装驱动程序。升级 Android USB 驱动程序要在 Windows 7 及更高版本的系统上使用新驱动程序升级现有的 Android USB 驱动程序,请执行以下操作:将 Android 设备连接到计算机的 USB 端口;从桌面上或 Windows 资源管理器中右键点击计算机,然后选择管理;在“计算机管理”窗口的左侧窗格中选择设备管理器;在右侧窗格中找到并展开 Android 手机;右键点击 Android Composite ADB Interface,然后选择更新驱动程序。这将启动硬件更新向导;选择从列表或特定位置安装,然后点击下一步;选择在这些位置搜索最佳驱动程序,取消选中搜索可移动介质,并选中在搜索中包含此位置;点击浏览,然后找到 USB 驱动程序文件夹。(Google USB 驱动程序位于 android_sdk\extras\google\usb_driver\。);点击下一步以升级驱动程序。
原生插件开发就是用原生语言进行插件开发,对于 uni-app 原生插件来说,原生语言包括 android 或者 ios 代码。我们使用 android、 ios 代码开发的插件,可以在 uni-app 框架中通过 vue 代码调用,这就是 uni-app原生插件了。
选项文菜单是最常用的 Menu,可以直接通过 Android 的“菜单键”唤出,通常直接为当前 Activity 服务。在高版本的 Android 系统上是从右上角弹出,可以在里面放置一些常用的功能入口或者设置项等等高频选项。
调用 Toast 的静态方法makeText:传入Context、字符串文案、显示时长即可创建一个 Toast。为了避免内存泄露,这里的 Context 建议使用getApplicationContext()来获取 App 的 Context 传入,如下:Toast toast = Toast.makeText(getApplicationContext(),"IMOOC Android Study",Toast.LENGTH_LONG);调用 Toast 的show()方法toast.show();我们可以将以上两句串联起来,如下:Toast.makeText(getApplicationContext(),"IMOOC Android Study",Toast.LENGTH_LONG).show();
这门课程要求学习者能进行基本的计算机操作,了解命令行则更佳;这门课程适合零基础学习 Android 应用开发,有 Java 语言基础则更佳;这门课程同样适用于希望了解更多 Android Studio 高级使用技巧的开发者。