第一行代码 Android (郭霖 著)

https://github.com/guolindev/booksourcehtml

 

第1章 开始启程----你的第一行Android代码 (已看)java

第2章 先从看获得的入手----探究活动android

第3章 软件也要拼脸蛋----UI开发的点点滴滴git

第4章 手机平板要兼顾----探究碎片github

第5章 全局大喇叭----详解广播机制数据库

第6章 数据存储全方案----详解持久化技术编程

第7章 跨程序共享数据----探究内容提供器缓存

第8章 丰富你的程序----运用手机多媒体网络

第9章 看看精彩的世界----使用网络技术多线程

第10章 后台默默的劳动者----探究服务

第11章 Android特点开发----基于位置的服务

第12章 最佳的UI体验----Material Design实战

第13章 继续进阶----你还应该掌握的高级技巧

第14章 进入实战----开发酷欧天气

第15章 最后一步----将应用发布到360应用商店

 

第1章 开始启程----你的第一行Android代码

谷歌终于在2008年推出了Android系统的第一个版本

  1.1 了解全貌----Andorid王国简介

    1.1.1 Android系统架构

  1. Linux内核层
  2. 系统运行库层
  3. 应用框架层
  4. 应用层

    1.1.2 Andorid已发布的版本

    1.1.3 Andorid应用开发特点

  1. 四大组件  活动(Activity), 服务(Service), 广播接收器(Broadcast Receiver), 内容提供器(ContentProvidedr)
  2. 丰富的系统控件
  3. SQLite数据库
  4. 强大的多媒体
  5. 地理位置定位

  1.2 手把手带你搭建开发环境

    1.2.1 准备所须要的工具

  • JDK
  • Android SDK
  • Android Studio

    1.2.2 搭建开发环境

https://developer.android.com/studio/index.html

  1.3 建立你的第一个Android项目

    1.3.1 建立Hello World项目

Minimum API Level: API 15:Android 4.0.3(IceCreamSandwich)

    1.3.2 启动模拟器

Nexus 5X API 24 Android 7.0 x86

    1.3.3 运行Hello World

    1.3.4 分析你的第一个Android程序

任何一个新建的项目都会默认使用Andorid模式的项目结构,但这并非项目真实的目录结构,而是被Android Studio转换过的.

项目真实的目录结构,Project

1. .gradle和.idea

  这两个目录下放置的都是Android Studio自动生成的一些文件, 咱们无须关心, 也不要去手动编辑

2. app

  项目中的代码, 资源等内容几乎都是放置在这个目录下的, 咱们后面的开发工做也基本都是在这个目录下进行的,待会儿还会对这个目录单独展开进行详解

3. build

  这个目录你也不须要过多关心, 它主要包含了一些在编译时自动生成的文件

4. gradle

  这个目录下包含了gradle wrapper的配置文件,使用gradle wrapper的方式不须要提早将gradle下载好,而是会自动根据本地的缓存状况决定是否须要联网下载gradle.

5. .gitignore

  这个文件是用来将指定的目录或文件排除在版本控制以外的

6. build.gradle

  这是项目全局的gradle构建脚本,一般这个文件的内容是不须要修改的.

7. gradle.properties

  这个文件是全局的gradle配置文件,在这里配置的属性将会影响到项目中全部的gradle编译脚本

8. gradlew和gradlew.bat

  这两个文件是用来在命令行界面中执行gradle命令的,其中gradlew是在Linux或Mac系统中使用的,gradlew.bat是在Windows系统中使用的

9. HelloWorld.iml

  iml文件是全部IntelliJ IDEA项目都会自动生成的一个文件(Android Studio是基于IntelliJ IDEA开发的),用于标识这是一个IntelliJ IDEA项目,咱们不须要修改这个文件中的任何内容

10. local.properties

  这个文件用于指定本机中的Android SDK路径, 一般内容都是自动生成的,咱们并不须要修改.除非你本机中的Android SDK位置发生了变化, 那么就将这个文件中的路径改为新的位置便可

11. settings.gradle

  这个文件用于指定项目中全部引入的模块. 因为Hello World项目中就只有一个app模块,所以该文件中也就只引入了app这一个模块.一般状况下模块的引入都是自动完成的,须要咱们手动去修改这个文件的场景可能比较少

app目录下的内容

1. build

  这个目录和外层的build目录相似, 主要也是包含了一些在编译时自动生成的文件,不过它里面的内容会更多更杂,咱们不须要过多关心

2. libs

  若是你的项目中使用到了第三方jar包,就须要把这些jar包都放在libs目录下,放在这个目录下的jar包都会被自动添加到构建路径里去

3. androidTest

  此处是用来编写Android Test测试用例的,能够对项目进行一些自动化测试

4. java

  毫无疑问,java目录是放置咱们全部的Java代码的地方, 展开该目录, 你将看到咱们刚才建立的HelloWorldActivity文件就在里面

5. res

  这个目录下的内容就有点多了.简单点说, 就是你在项目中使用到的全部图片, 布局, 字符串等资源都要存放在这个目录下, 固然这个目录下还有不少子目录,图片放在drawable目录下,布局放在layout目录下, 字符串放在values目录下,因此你不用担忧会把整个res目录弄得乱糟糟的

6. AndroidManifest.xml

  这是你整个Android项目的配置文件,你在程序中定义的全部四大组件都须要的这个文件里注册, 另外还能够在这个文件中给应用程序添加权限声明.因为这个文件之后会常常用到, 咱们用到的时候再作详细说明

7. test

  此处是用来编写Unit Test测试用例的,是对项目进行自动化测试的另外一种方式

8. .gitignore

  这个文件用于将app模块内的指定目录或文件排除在版本控制以外, 做用和外层的.gitignore文件相似

9. app.iml

  IntelliJ IDEA项目自动生成的文件,咱们不须要关心或修改这个文件中的内容

10. build.gradle

  这是app模块的gradle构建脚本,这个文件中会指定不少项目构建相关的配置

11. proguard-rules.rpo

  这个文件用于指定项目代码的混淆规则,当代码开发完成后打成安装包文件,若是不但愿代码被别人破解, 一般会将代码进行混淆,从而让破解者难以阅读

 

<activity android:name=".HelloWorldActivity">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>
AndoridManifest.xml
public class HelloWorldActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.hello_world_layout);
    }
}
HelloWorldActivity
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".HelloWorldActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text = "Hello World!"/>
</android.support.constraint.ConstraintLayout>
hello_world_layout.xml

    1.3.5 详解项目中的资源

全部以drawable开头的文件夹都是用来放图片的,全部以mipmap开头的文件都是用来放应用图标的,全部以values开头的文件夹都是用来放字符串,样式,颜色等配置的,layout文件夹是用来放布局文件的.

之因此有这么多mipmap开头的文件夹,主要是为了让程序可以更好地兼容各类设备. drawable文件夹也是相同的道理

<resources>
    <string name="app_name">HelloWorld</string>
</resources>
res/values/strings.xml
  • 在代码中经过R.string.hello_world能够得到该字符串的引用
  • 在xml中经过@string/hello_world能够得到该字符串的引用

    1.3.6 详解build.gradle文件

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        google()
        jcenter()
        
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.4.0'
        
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        google()
        jcenter()
        
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}
build.gradle
apply plugin: 'com.android.application'

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.voidgame.helloworld"
        minSdkVersion 15
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}
app/build.gradle

  1.4 前行必备----掌握日志工具的使用

    1.4.1 使用Android的日志工具Log

  • Log.v().  用于打印那些最为琐碎的,意义最小的日志信息.对应级别verbose,是Android日志里面级别最低的一种
  • Log.d().  用于打印一些调试信息,这些信息对你调试程序和分析问题应该是有帮助的.对应级别debug,比verbose高一级
  • Log.i().  用于打印一些比较重要的数据,这些数据应该是你很是想看到的,能够帮你分析用户行为数据.对应级别info,比debug高一级
  • Log.w().  用于打印一些警告信息, 提示程序在这个地方可能会有潜在的风险,最好去修复一下这些出现警告的地方. 对应级别warn,比info高一级
  • Log.e().  用于打印程序中的错误信息,好比程序进入到了catch语句当中.当有错误信息打印出来的时候,通常都表明你的程序出现严重问题了,必须尽快修复. 对应级别error, 比warn高一级

    1.4.2 为何使用Log而不使用System.out

  1.5 小结与点评

第2章 先从看获得的入手----探究活动

  2.1 活动是什么

  2.2. 活动的基本用法

    2.2.1 手动建立活动

    2.2.2 建立和加载布局

    2.2.3 在AndroidManifest文件中注册

    2.2.4 在活动中使用Toast

    2.2.5 在活动中使用Menu

    2.2.6 销毁一个活动

  2.3 活动的生命周期

    2.3.1 返回栈

    2.3.2 活动状态

    2.3.3 活动的生存期

    2.3.4 向下一个活动传递数据

    2.3.5 返回数据给上一个活动

  2.4 活动的生命周期

    2.4.1 返回栈

    2.4.2 活动状态

    2.4.3 活动的生存期

    2.4.4 体验活动的生命周期

    2.4.5 活动被回收了怎么办

  2.5 活动的启动模式

    2.5.1 standard

    2.5.2 singleTop

    2.5.3 singleTask

    2.5.4 singleInstance

  2.6 活动的最佳实践

    2.6.1 知晓当前是在哪个活动

    2.6.2 随时随地退出程序

    2.6.3 启动活动的最佳写法

  2.7 小结与点评

第3章 软件也要拼脸蛋----UI开发的点点滴滴

  3.1 如何编写程序界面

  3.2 经常使用控件的使用方法

    3.2.1 TextView

    3.2.2 Button

    3.2.3 EditText

    3.2.4 ImageView

    3.2.5 ProgressBar

    3.2.6 AlertDialog

    3.2.7 ProgressDialog

  3.3 详解4中基本布局

    3.3.1 线性布局

    3.3.2 相对布局

    3.3.3 帧布局

    3.3.4 百分比布局

  3.4 系统控件不够用?建立自定义控件

    3.4.1 引入布局

    3.4.2 建立自定义控件

  3.5 最经常使用和最难用的控件----List View

    3.5.1 ListView的简单用法

    3.5.2 定制ListView的界面

    3.5.3 提高ListView的运行效率

    3.5.4 ListView的点击事件

  3.6 更强大的滚动控件----Recycler View

    3.6.1 RecyclerView的基本用法

    3.6.2 实现横向滚动和瀑布流布局

    3.6.3 RecyclerView的点击事件

  3.7 编写界面的最佳实践

    3.7.1 制做Nine-Patch图片

    3.7.2 编写精美的聊天界面

  3.8 小结与点评

第4章 手机平板要兼顾----探究碎片

  4.1 碎片是什么

  4.2 碎片的使用方式

    4.2.1 碎片的简单用法

    4.2.2 动态添加碎片

    4.2.3 在碎片中模拟返回栈

    4.2.4 碎片和活动之间进行通讯

  4.3 碎片的生命周期

    4.3.1 碎片的状态和回调

    4.3.2 体验碎片的生命周期

  4.4 动态加载布局的技巧

    4.4.1 使用限定符

    4.4.2 使用最小宽度限定符

  4.5 碎片的最佳实践----一个简易版的新闻应用

  4.6 小结与点评

第5章 全局大喇叭----详解广播机制

  5.1 广播机制简介

  5.2 接收系统广播

    5.2.1 动态注册监听网络变化

    5.2.2 静态注册实现开机启动

  5.3 发送自定义广播

    5.3.1 发送标准广播

    5.3.2 发送有序广播

  5.4 使用系统广播

  5.5 广播的最佳实践----实现强制下线功能

  5.6 Git时间----初识版本控制工具

    5.6.1 安装Git

    5.6.2 建立代码仓库

    5.6.3 提交本地代码

  5.7 小结与点评

第6章 数据存储全方案----详解持久化技术

  6.1 持久化技术简介

  6.2 文件存储

    6.2.1 将数据存储到文件中

    6.2.2 从文件中读取数据

  6.3 SharedPreferences存储

    6.3.1 将数据存储到SharedPreferences中

    6.3.2 从SharedPreferences中读取数据

    6.3.3 实现记住密码功能

  6.4 SQLite数据库存储

    6.4.1 建立数据库

    6.4.2 升级数据库

    6.4.3 添加数据

    6.4.4 更新数据

    6.4.5 删除数据

    6.4.6 删除数据

    6.4.7 查询数据

  6.5 使用LitePal操做数据库

    6.5.1 LitePal简介

    6.5.2 配置LitePal

    6.5.3 建立和升级数据库

    6.5.4 使用LitePal添加数据

    6.5.5 使用LitePal更新数据

    6.5.6 使用LitePal删除数据

    6.5.7 使用LitePal查询数据

  6.6 小结与点评

第7章 跨程序共享数据----探究内容提供器

  7.1 内容提供器简介

  7.2 运行时权限

    7.2.1 Android权限机制详解

    7.2.2 在程序运行时申请权限

  7.3 访问其余程序中的数据

    7.3.1 ContentResolver的基本用法

    7.3.2 读取系统联系人

  7.4 建立本身的内容提供器

    7.4.1 建立内容提供器的步骤

    7.4.2 实现跨程序数据共享

  7.5 Git时间----版本控制工具进阶

    7.5.1 忽略文件

    7.5.2 查看修改内容

    7.5.3 撤销未提交的修改

    7.5.4 查看提交记录

  7.6 小结与点评

第8章 丰富你的程序----运用手机多媒体

  8.1 将程序运行到手机上

  8.2 使用通知

    8.2.1 通知的基本用法

    8.2.2 通知的进阶技巧

    8.2.3 通知的高级功能

  8.3 调用摄像头和相册

    8.3.1 调用摄像头拍照

    8.3.2 从相册中选择照片

  8.4 播放多媒体文件

    8.4.1 播放音频

    8.4.2 播放视频

  8.5 小结与点评

第9章 看看精彩的世界----使用网络技术

  9.1 WebView的用法

  9.2 使用HTTP协议访问网络

    9.2.1 使用HttpURLConnection

    9.2.2 使用OkHttp

  9.3 解析XML格式数据

    9.3.1 Pull解析方式

    9.3.2 SAX解析方式

  9.4 解析JSON格式数据

    9.4.1 使用JSONObject

    9.4.2 使用GSON

  9.5 网络编程的最佳实践

  9.6 小结与点评

第10章 后台默默的劳动者----探究服务

  10.1 服务是什么

  10.2 Android多线程编程

    10.2.1 线程的基本用法

    10.2.2 在子线程中更新UI

    10.2.3 解析异步消息处理机制

    10.2.4 使用AsyncTask

  10.3 服务的基本用法

    10.3.1 定义一个服务

    10.3.2 启动和中止服务

    10.3.3 活动和服务进行通讯

  10.4 服务的生命周期

  10.5 服务的更多技巧

    10.5.1 使用前台服务

    10.5.2 使用IntentService

  10.6 服务的最佳实践----完整版的下载示例

  10.7 小结与点评

第11章 Android特点开发----基于位置的服务

  11.1 基于位置的服务简介

  11.2 申请API Key

  11.3 使用百度定位

    11.3.1 准备LBK SDK

    11.3.2 肯定本身位置的经纬度

    11.3.3 选择定位模式

    11.3.4 看得懂的位置信息

  11.4 使用百度地图

    11.4.1 让地图显示出来

    11.4.2 移动到个人位置

    11.4.3 让"我"显示在地图上

  11.5 Git时间----版本控制工具的高级用法

    11.5.1 分支的用法

    11.5.2 与远程版本库协做

  11.6 小结与点评

第12章 最佳的UI体验----Material Design实战

  12.1 什么是Material Desgin

  12.2 Toolbar

  12.3 滑动菜单

    12.3.1 DrawerLayout

    12.3.2 NavigationView

  12.4 悬浮按钮和可交互提示

    12.4.1 FloatingActionButton

    12.4.3 Snackbar

    12.4.4 CoordinatorLayout

  12.5 卡片式布局

    12.5.1 CardView

    12.5.2 AppBarLayout

  12.6 下拉刷新

  12.7 可折叠式标题栏

    12.7.1 CollapsingToolbarLayout

    12.7.2 充分利用系统状态栏空间

  12.8 小结与点评

第13章 继续进阶----你还应该掌握的高级技巧

  13.1 全局获取Context的技巧

  13.2 使用Intent传递对象

    13.2.1 Serializable方式

    13.2.2 Parcelable方式

  13.3 定制本身的日志工具

  13.4 调试Android程序

  13.5 建立定时人物

    13.5.1 Alarm机制

    13.5.2 Doze模式

  13.6 多窗口模式编程

    13.6.1 进入多窗口模式

    13.6.2 多窗口模式下的生命周期

    13.6.3 禁用多窗口模式

  13.7 Lambda表达式

  13.8 总结

第14章 进入实战----开发酷欧天气

  14.1 功能需求及技术可行性分析

  14.2 Git时间----将代码托管到GitHub上

  14.3 建立数据库和表

  14.4 遍历全国省市县数据

  14.5 显示天气信息

    14.5.1 定义GSON实体类

    14.5.2 编写天气界面

    14.5.3 将天气显示到界面上

    14.5.4 获取必应每日一图

  14.6 手动更新天气和切换城市

    14.6.1 手动更新天气

    14.6.2 切换城市

  14.7 后台自动更新天气

  14.8 修改图标和名称

  14.9 你还能够作的事情

第15章 最后一步----将应用发布到360应用商店

  15.1 生成正式签名的APK文件

    15.1.1 使用Android Studio生成

    15.1.2 使用Gradle生成

    15.1.3 生成多渠道APK文件

  15.2 申请360开发者帐号

  15.3 发布应程序

  15.4 嵌入广告进行盈利

    15.4.1 注册腾讯广告联盟帐号

    15.4.2 新建媒体和广告位

    15.4.3 接入广告SDK

    15.4.4 从新发布应用程序

  15.5 结束语

相关文章
相关标签/搜索