Android studio _ 开发手册_JAVA

 


Android studio _ 开发手册_JAVA_02

安卓界面UI元素

  • 常用组件 关系
    视图
    组件
    布局
  1. android 视图/ widget /布局
# 百度地图开放平台,注册并登录开发者账号,登陆以后在开发文档中选择Android地图SDK#

Android studio _ 开发手册_JAVA_03Android studio _ 开发手册_JAVA_04

#创建app项目#

Android studio _ 开发手册_JAVA_05Android studio _ 开发手册_JAVA_06Android studio _ 开发手册_JAVA_07

  • 模拟器 初始化 错误解决

Android studio _ 开发手册_JAVA_08Android studio _ 开发手册_JAVA_09Android studio _ 开发手册_JAVA_10Android studio _ 开发手册_JAVA_11Android studio _ 开发手册_JAVA_12Android studio _ 开发手册_JAVA_13

  • 成功模拟

Android studio _ 开发手册_JAVA_14

#开发版SHA1(debug):#

Android studio _ 开发手册_JAVA_15Android studio _ 开发手册_JAVA_16Android studio _ 开发手册_JAVA_17

  • 验证下
    继续输入keytool -list -v -keystore debug.keystore
    开发版本默认密码是: android
    Android studio _ 开发手册_JAVA_18

#发布版SHA1(release)#

#新建密匙文件步骤#

Android studio _ 开发手册_JAVA_19Android studio _ 开发手册_JAVA_20Android studio _ 开发手册_JAVA_21Android studio _ 开发手册_JAVA_22Android studio _ 开发手册_JAVA_23Android studio _ 开发手册_JAVA_24

Android studio _ 开发手册_JAVA_25Android studio _ 开发手册_JAVA_26Android studio _ 开发手册_JAVA_27Android studio _ 开发手册_JAVA_28Android studio _ 开发手册_JAVA_29Android studio _ 开发手册_JAVA_30

Kotlin、Android Things等

从安卓开发开始 Level 1
1.从Head First Java学习基础Java
2.安装Android Studio
3.在Android Studio设置kotlin - 如果今年不想学的话可以跳过
4.阅读Android User interface  - 学习关于XML和查看组件的更多信息

你这样做仅仅是准备好一个开发环境去构建安卓App,但是你还得去准备好基础和基本知识来理解安卓开发和大多数教程使用的通用术语

你现在也可以在安卓系统上构建基本的App,并且可以开发一些功能。随意使用空白画布,用你的想象力填充它。

当你玩完创意后,2019年你的下一个目标是加快游戏进度,推动自己成为一名为数十亿人构建应用的开发者。我们现在去第二层!

提升自己 - 作为一个安卓开发者 Level 2
这个列表将作为你学习、实践和前进的阶梯。

了解Activity的生命周期,以推动一个没有bug的App
使用Fragment利用动态的、灵活的和动态的UI设计
学习如何调试你的安卓App-使用Android Studio Debugger
掌握Activity来去构建你希望用户浏览的页面
了解安卓的Context
学习REST和HTTP - 大多数专业开发都非常擅长理解REST和HTTP的所有特点
学习如何利用多线程
1.学习如何将耗时操作移出主线程
2.线程的重要性
3.学习提供的帮助你在最短时间内最大限度地利用线程代码的类
4.了解安卓如何在系统级使用线程,这将如何影响App中的设计选择和决策
5.了解系统内存和线程代码的细微差别
6.了解如何将线程解决方案应用于极其庞大和复杂的任务
成为处理配置更改的专家
1.在配置更改期间保留对象
2.自己处理配置更改
学习数据库和SQL
1.云数据库
2.离线和本地数据库
3.离线架构和离线初步实践
内容提供 Content providers
1.学习如何分享你的数据给其他App
2.学习如何访问其他App的知识
3.创建一个Content providers,帮助其他应用程序安全地访问和修改你App的数据
4.试着玩一下日历App和联系人App的Content providers
学习一些顶级的第三方库 - 最有用也最常用的
1.OkHttp
2.GSON
3.Retrofit
4.Glide
5.Butter Knife
6.Crashlytics
7.Guava
所有这些都有助于你建立对安卓生态系统的专业理解,并让你准备好使用安卓处理至少10-15种不同类型的业务用例。

了解安卓执行模式
当你真的想用安卓打造一个极其强大且难忘的体验时,从安卓执行模式开始是一个完美的地方。如果你浏览下面列表,你不仅会学到如何实现它们,还会发现一些你可能会错过的执行模式。他们是专业开发手中不可思议的工具。因此,在安卓执行模式方面,你需要学习和注意以下几点:

异步任务对于运行长回调或线程回调的进程没有帮助。学习如何使用Handlerthread来处理这些过程
了解如何处理内存抖动
了解如何将Intent Services与线程配合使用以提高效率
了解安卓服务的执行模式,以便在Service工作结束后立即终止服务
了解安卓特定的Hashmap容器,构建性能和内存平衡的App
了解如何使用内存监控工具来观察分配内存是如何影响App的性能的
使用缓存优化应用程序的网络性能
优化应用程序网络请求的频率
了解处理内存泄露的视图
了解如何处理垃圾回收
了解如何更新App的视觉属性去影响性能
深入了解垂直同步
了解如何将安卓用户界面与GPU进行映射,并发现你应该解决的复杂程度,以确保你的App平稳运行
了解如何构建以60fps渲染而不丢帧的应用程序
了解有多少其他App与你的App竞争系统资源,并设计应对策略
了解如何跟GPU性能并在渲染App时提高性能
了解如何减少电池消耗的策略
将你的应用与你的竞争对手和Playstore突破性应用进行对比,并尝试在应用发布时间内进行改进。看看你能走多远
缩小app的大小
让我们把它带到第三层 Leve3
深入研究Bitmap的内存优化
学习和练习如何使用Glide在安卓App中处理位图。你面临的问题是,当你在你的App上提供大量内容时,需要获取、解码和显示位图。如果你做得不对,你最终会破坏你的应用,确保很多用户会觉得你的应用不好。

请注意,现在你必须处理多达48MBs的位图,这些位图仅来自用户的相机生成的图像。这很容易耗尽所有可用的内存。

安卓架构组件
作为开发,我学到的最重要的事情之一是在架构及其组件之上进行实践和创新。当我开始超越MVP、MVVM、MVx等等的时候,我意识到围绕这些架构组件还有大量的创新空间。

例如,早在2017年,默认的BLE(蓝牙低能耗)配置和设置就达不到标准。理解一个架构组件可以通过构建一个中间服务库在这里得到改进对我来说是一个巨大的好处。

因此,为了正确了解这一点,我建议你选择App的各个架构组件,并学习它们的最佳实践。我想到的其中一些是:

Data binding
Lifecycles
LiveData
Navigation
Paging
Room
ViewModel
WorkManager
做一名测试专家
你不想成为那些说“它在我的系统上运行良好”的开发者之一,对吗?因此,在架构设计和优化知识的基础上构建一切,创建单元测试(JUnit4),学习如何使用Espresso,并专注于构建令工程经理和虚拟专用网络满意的代码覆盖率报告。关注这些报告如何帮助工程师、测试人员、经理和利益相关者解决关键App的性能问题,并确定它们的优先级。

并尽可能多地从原始设置中实现自动化和重用。这为你成为一名工程经理铺平了道路。

反应式编程 - RxJava
这是不言而喻的,也可能是你简历和实际面试中最受关注的信息之一。有很多地方你可以实际学习如何实现RxJava和它的最佳实践。但是,我最喜欢的是:

Grokking RxJava Series
Exploring RxJava 2 by Jake Wharton
Managing State with RxJava by Jake Wharton
它们是你理解RxJava并掌握其某些方面的一个很好的起点。如果你希望围绕RxJava探索更多主题,请考虑浏览以下内容:

Depth of Observables in RxJava
Implementing Caching using RxJava
了解Dagger的一切
成为Dagger专家的步骤是:

浏览文档并理解整个依赖注入过程
建立一个限制列表
建立一个项目并在其中实现Dagger2
安全专业
安卓专家和安全专家?哇!这是我们在开发中很少看到的东西!
因此,在2019年,你可以做一些事情来成为那个人:

了解如何将App的数据和代码与其他应用程序隔离开来
学习密码功能并实现它们
了解如何消除与内存管理错误相关的风险
了解如何最好地使用用户授予的权限来控制应用程序数据
安全数据存储和加密:本地存储、动态存储或云存储
精通Content Provider的安全访问
确保你混淆了你的数据
了解如何实现不属于通用安卓系统的本地安全解决方案
审核受欢迎的第三方库,以了解并按漏洞级别分解它们,并围绕它构建一个研究文档
努力让BLE在你的应用程序中更加安全

1.认识目录

Android studio _ 开发手册_JAVA_31
以FirstActivity为例子,我们需要掌握的文件有:

  • manifest
  • java
  • drawable
  • layout
  • values

①manifest文件夹里面只有一个AndroidManifest.xml文件,
在这个文件里,我们是对整个app进行一些设置,
例如app的logo,app一进去的启动页面,app的名字…
Android studio _ 开发手册_JAVA_32
②java文件夹里面是.java文件,
负责整个app的逻辑处理,是完成整个app的核心所在。
TIPS:初学者一般Java文件建立好了之后,不会随便移动它的位置。

③drawable文件夹里面放app需要用到的图片

④layout文件夹里面放的是“画页面”的.xml文件,里面的文件也叫布局文件。如
果你会html&css&js的话,就很好理解了。
.xml文件的作用就和.html和.css文件的作用类似,
页面需要什么组件?怎么布局?用一些什么样式?
都在.xml里面设置。
但是对于一些复杂的样式,
在.xml文件里面可能设置不了那么精美,就可以在java文件里面设置。

⑤value文件夹里面放了一些字符串,颜色等常量,例如:
Android studio _ 开发手册_JAVA_33

  • 名字叫colorPrimary,之后我在布局文件中用这个颜色,
    就只需要喊它的名字colorPrimary就可以了

最后总结一些基本思想:

layout和java文件夹是最重要的。
如果把app比作一个人,
layout就是一个人的脸,java就是一个人是灵魂。
前者决定了这个app长什么样子,后者决定了这个app可以实现那么功能。

对于初学者,AndroidManifest.xml和value文件夹的作用不用着急掌握


2.RelativeLayout

AndroidStudio里面支持的布局有挺多种的,
但是最最重要的是RelativeLayout(相对布局)和LinearLayout(线性布局),
熟练掌握这两种布局也非常够用了,
当然还有GridLayout…
但是对于初学者,先学会了相对布局和线性布局,再去学习其他布局,就会觉得非常简单轻松了。
还有一个非常有用的布局,叫RecyclerLayout,因为要结合adapter使用,所以对于初学者略难,

学习布局需要掌握的东西很简单,就是它有的属性,以及取不同属性值可以达到的效果,下面我就慢慢列出来。

layout_width
layout_height
这两个属性就决定了布局的宽度和高度,
把RelativeLayout想象成一个相框或者一个容器,在这个相框里面可以装其他的组件。对于嵌套在相框里面的组件,其所在的相框就是它的父空间。这个相框的大小呢,就用上面这两个属性决定,

取值有三种:

wrap_content 刚刚把文字组件包裹满的长度
match_parent 撑满整个父空间的长度
100px 具体的像素值
对于相对布局有一个地方要注意!!!

相对布局里面的组件需要设置id
(在同一个.xml文件里面的所有组件,其id不可以重复哦~)
然后用layout_below设置组件的相对位置。

 
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
 
    <Button
        android:id="@+id/button_1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button 1"
        />
 
    <Button
        android:id="@+id/button_2"
        android:layout_below="@id/button_1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button 2"
        />
</RelativeLayout> 

例如上面这个例子,
在RelativeLayout里面有两个按钮,
第一个按钮的id是button_1,android:id="@+id/button_1",
第二个按钮的id是button_2,
为button_2设置了
android:layout_below="@id/button_1"表示按钮2在按钮1的下面。
所以效果图如下:
Android studio _ 开发手册_JAVA_34
如果我不为按钮2设置相对向下的对象会怎样呢?
也就是删掉android:layout_below="@id/button_1"。
答案是按钮二会覆盖按钮一。
Android studio _ 开发手册_JAVA_35
想让按钮居中怎么办?
为RelativeLayout添加一个属性 android:gravity=“center”
Android studio _ 开发手册_JAVA_36
希望按钮一和按钮二并排在一起怎么办?
答案是:sorry,RelativeLayout做不到啊~~

但是LinearLayout可以做到


3.LinearLayout
线性布局要灵活一些,在实际应用上也是最最最广泛的。

layout_width
layout_height
和相对布局一样的用法和属性值,

区别于RelativeLayout,LinearLayout就不要求每个组件都要设置自己的id了,
但是最好还是设置一下

怎么设置两个组件是横着并排还是竖着并排呢
线性布局的重要属性 orientation

取值有两种:vertical(垂直)和 horizontal(水平)

 <LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    >
 
    <Button
        android:id="@+id/button_1"
        android:layout_width="200px"
        android:layout_height="100px"
        android:text="Button 1"
        />
 
    <Button
        android:id="@+id/button_2"
        android:layout_width="200px"
        android:layout_height="100px"
        android:text="Button 2"
        />
 
    <Button
        android:id="@+id/button_3"
        android:layout_width="200px"
        android:layout_height="100px"
        android:text="Button 3"
        />
 
</LinearLayout> 

Android studio _ 开发手册_JAVA_37
android:orientation=“horizontal”
决定了容器里面的所有组件都绝对是水平排列的
!!!哪怕我的组件已经装不下了,也不会被挤到下一排,
而是只显示一截,甚至完全不显示。


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    >
 
    <Button
        android:id="@+id/button_1"
        android:layout_width="200px"
        android:layout_height="100px"
        android:text="Button 1"
        />
 
    <Button
        android:id="@+id/button_2"
        android:layout_width="200px"
        android:layout_height="100px"
        android:text="Button 2"
        />
 
</LinearLayout> 

Android studio _ 开发手册_JAVA_38
android:orientation="vertical"决定了容器里的组件都是垂直排列
线性布局还有一个重要的属性 layout_weight
取值一般是1、2、3…表示权重的大小

  <LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    >
 
    <Button
        android:id="@+id/button_1"
        android:layout_width="200px"
        android:layout_height="100px"
        android:layout_weight="1"
        android:text="Button 1"
        />
 
    <Button
        android:id="@+id/button_2"
        android:layout_width="200px"
        android:layout_height="100px"
        android:layout_weight="2"
        android:text="Button 2"
        />
 
</LinearLayout> 

Android studio _ 开发手册_JAVA_39
LinearLayout的强大就在于它是可以嵌套的,从而实现很多复杂的布局。
Android studio _ 开发手册_JAVA_40Android studio _ 开发手册_JAVA_41

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingLeft="10dp"
    android:paddingRight="10dp"
    android:background="#FFEA8E"
    >
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#98E0AD">
 
                <ImageView
                    android:id="@+id/image_bg"
                    android:layout_width="match_parent"
                    android:layout_height="258dp"
                    android:background="#EDD3ED"/>
 
                <LinearLayout
                    android:layout_below="@id/image_bg"
                    android:id="@+id/layout_button"
                    android:layout_width="match_parent"
                    android:layout_height="70dp"
                    android:background="#F8A1A4"
                    android:orientation="vertical">
 
                    <RadioGroup
                        android:id="@+id/rg_main"
                        android:layout_width="match_parent"
                        android:layout_height="70dp"
                        android:layout_marginLeft="40dp"
                        android:layout_alignParentBottom="true"
                        android:background="#C785C8"
                        android:orientation="horizontal">
 
                        <RadioButton
                            android:id="@+id/rb_me"
                            android:layout_width="0dp"
                            android:layout_height="match_parent"
                            android:layout_weight="1"
                            android:paddingRight="28dp"
                            android:background="#C00000"
                            android:button="@null"
                            android:gravity="center"
                            android:textSize="19sp" />
 
                        <RadioButton
                            android:id="@+id/rb_heart"
                            android:layout_width="0dp"
                            android:layout_height="match_parent"
                            android:paddingRight="33dp"
                            android:layout_weight="1"
                            android:button="@null"
                            android:background="#7030A0"
                            android:gravity="center"
                            android:textSize="19sp" />
 
                        <RadioButton
                            android:id="@+id/rb_order"
                            android:layout_width="0dp"
                            android:layout_height="match_parent"
                            android:layout_weight="1"
                            android:background="#00B0F0"
                            android:paddingRight="34dp"
                            android:button="@null"
                            android:gravity="center"
                            android:textSize="19sp" />
                    </RadioGroup>
                </LinearLayout>
 
 
                <LinearLayout
                    android:id="@+id/layout_mywork"
                    android:layout_below="@id/layout_button"
                    android:layout_width="match_parent"
                    android:layout_height="74dp"
                    android:background="#6BD089"
                    android:orientation="vertical">
 
                    <TextView
                        android:layout_width="match_parent"
                        android:layout_height="62dp"
                        android:textColor="#212122"
                        android:gravity="center"
                        android:background="#8389E0"
                        android:textSize="24sp"
                        />
 
                </LinearLayout>
 
                <LinearLayout
                    android:id="@+id/layout_work1"
                    android:layout_below="@id/layout_mywork"
                    android:layout_width="match_parent"
                    android:orientation="horizontal"
                    android:paddingRight="6dp"
                    android:paddingLeft="6dp"
                    android:background="#C785C8"
                    android:layout_height="150dp">
 
                    <ImageView
                        android:padding="0dp"
                        android:layout_width="match_parent"
                        android:layout_weight="1"
                        android:layout_height="160dp"
                        android:background="#FBCFD0"
                        android:layout_marginRight="6dp"
                        android:layout_marginLeft="6dp"
                        />
 
                    <ImageView
                        android:layout_width="match_parent"
                        android:layout_weight="1"
                        android:background="#FBCFD0"
                        android:layout_marginRight="6dp"
                        android:layout_marginLeft="6dp"
                        android:layout_height="160dp"
                        />
 
                    <ImageView
                        android:id="@+id/work1"
                        android:layout_width="match_parent"
                        android:layout_weight="1"
                        android:background="#FBCFD0"
                        android:layout_marginRight="6dp"
                        android:layout_marginLeft="6dp"
                        android:layout_height="160dp"
                        />
 
                </LinearLayout>
 
                <LinearLayout
                    android:id="@+id/layout_work2"
                    android:layout_below="@id/layout_work1"
                    android:layout_width="match_parent"
                    android:layout_marginTop="10px"
                    android:orientation="horizontal"
                    android:paddingRight="6dp"
                    android:paddingLeft="6dp"
                    android:background="#60C5F1"
                    android:layout_height="150dp">
 
                    <ImageView
                        android:padding="0dp"
                        android:layout_width="match_parent"
                        android:layout_weight="1"
                        android:layout_height="160dp"
                        android:layout_marginRight="6dp"
                        android:layout_marginLeft="6dp"
                        android:background="#C8EFD4"
                        />
 
                    <ImageView
                        android:layout_width="match_parent"
                        android:layout_weight="1"
                        android:layout_marginRight="6dp"
                        android:layout_marginLeft="6dp"
                        android:layout_height="160dp"
                        android:background="#C8EFD4"
                       />
 
                    <ImageView
                        android:layout_width="match_parent"
                        android:layout_weight="1"
                        android:layout_marginRight="6dp"
                        android:layout_marginLeft="6dp"
                        android:layout_height="160dp"
                        android:background="#C8EFD4"
                        />
 
                </LinearLayout>
 
            </RelativeLayout>
 
</LinearLayout>