Android开发的基础学习 (一)

《第一行代码 ANDROID》学习笔记  ( 只记录碎片知识 )

第一章 

1、第一个 HelloWorld 程序解析

位于/app/java/HelloWorldActivity

public class HelloWorldActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout,hello_world_layout);
    }
}

① HelloWorldActivity 继承自 AppCompatActivity (Activity的子类);Activity 是 Android 系统提供的一个活动基类,项目中所有的活动都必须继承它或者它的子类才能拥有活动的特性。

② onCreate() 方法是一个活动被创建时必定要执行的方法,经常在这个方法中做一些初始化操作,如成员变量的初始化等;该方法在activity的生命周期中只调用一次,但是有一个例外就是切换横竖屏时。

③  setContentView() 方法给当前的活动引入了一个hello_world_layout布局。

位于 AndroidManifest.xml 文件

<activity android:name=".HelloWorldActivity">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

①  这段代码表示对 HelloWorldActivity 活动进行注册,没有在 AndroidMainfest.xml 里注册的活动是不能使用的。

②  intent-filter 里面的两行代码表示 HelloWorldActivity 是这个项目的主活动,在手机上点击应用图标,首先启动的就是这个活动。

布局文件位于res/layout目录下

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://shemas.android.com/tools"
    android:id="@+id/hello_world_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.helloworld.HelloWorldActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!" />
<RelativeLayout>

①  TextView 是Android系统提供的一个控件,用于在布局中显示文字。

总结:Android程序的设计讲究逻辑和视图分离并且活动需要在AndroidMainifest中进行注册

2、res目录下资源的引用

<resources>
    <string name="app_name">HelloWorld</string>
</resource>

①  在代码中通过 R.string.app_name 可以获得该字符串的引用

②  在XML中通过 @string/app_name 可以获得该字符串的引用

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"   // 应用图标
    android:label="@string/app_name"     // 应用名称
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    ...
</application>

3、解析 build.gradle 文件

// 全局 build.gradle

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.2.0'
    }
}

allprojexts {
    repositories {
        jcenter()
    }
}

①  两处repositories的闭包中都声明了 jcenter() 这行配置,jcenter是一个代码托管系统,很多Android开源项目都会选择将代码托管到 jcenter 上,声明了这行配置之后,就可以在项目中轻松引用任何 jcenter 上的开源项目。

②  dependencies 闭包中使用classpath声明了一个Gradle插件。因为Gradle插件不是专门为构建Android项目而开发的,所以需要声明com.android.build:gradle:2.2.0这个插件,2.2.0代表插件的版本号。

③  通常不需要更改,除非想添加一些全局的项目构建配置。

位于 /app/build.gradle

apply plygin: 'com.android.application'  // 应用了一个插件

android {  // Android闭包可以用来配置项目构建的各种属性
    compileSdkVersion 24  // 指定项目的编译版本
    buildToolsVersion "24.0.2"  // 指定项目构建工具的版本
    defaultConfig {  // 可以对项目的更多细节进行配置
        applicationId "com.example.helloworld"  // 指定项目的包名
        minSdkVersion 15  // 指定项目最低兼容的Android系统版本
        targetSdkVersion 24  // 表示在指定版本已做过测试,将自动引用相应版本的功能
        versionCode 1  // 指定项目的版本号
        versionName "1.0"  // 指定项目的版本名
    }
    buildTypes {  // buildTypes闭包用来指定生成安装文件的相关配置
        debug {  // 用来指定生成测试版本安装文件的配置
            // 显示Log
            signingConfig signingConfigs.config
            buildConfigField "boolean", "LOG_DEBUG", "true"
            //applicationIdSuffix ".debug"//包名加上debug
            manifestPlaceholders = [APP_NAME: "@string/app_name_miliao"]
            versionNameSuffix "-debug-v${gitVersionCode()}"
            minifyEnabled false
            zipAlignEnabled false
            shrinkResources false
        }

        release {  // 用来生成正式版安装文件的相关配置
            minifyEnable false  // 指定是否的项目的代码进行混淆
            proguardFiles getDefaultProguardFile('proguard-android.txt'),
                'proguard-rules.pro'  // 用于指定混淆时使用的规则文件 
        // proguard-android.txt 是在 Android SDK目录下的,里面是所有项目通用的混淆规则
        // proguard-rules.pro 是在当前项目的根目录的,里面可以编写当前目录特有的混淆规则
        }
    }
}

dependencies {  // dependencies闭包可以指定当前项目的所有的依赖关系
    // Android Studio 项目一共有3种依赖关系
    // 本地依赖: 可以对本地的Jar包或目录添加依赖关系
    // 库依赖: 可以对项目中的库模块添加依赖关系
    // 远程依赖: 可以对jcenter库上的开源项目添加依赖关系
    compile fileTree(dir: "libs", include: ['*.jar']) 
    // 本地依赖,表示将lib目录下所有.jar后缀的文件都添加到项目的构建路径之中
    compile 'com.android.support:appcompat-v7:24.2.1'
    // 远程依赖,com.android.support是域名部分,用于和其他公司的库做区分
    //          appcompat-v7是组名称,用于和同一公司中不同库做区分
    //          24.2.1是版本号,用于和同一个库不同版本做区分
    compile project(':helper')
    // 库依赖,与helper库建立依赖
    testCompile 'junit:junit:4.12' // 用于声明测试用例库
}

①  应用插件一般有两种值:com.android.application 应用程序模块  com.android.library 库模块 

应用程序模块可以直接运行,库模块只能作为代码库依附于别的应用程序模块来运行。

②  buildTypes闭包中的debug闭包可以忽略不写。

4、日志工具 Log

Android 中的日志工具类是 Log (android.util.Log)

Log.v() : 打印 最琐碎的、意义最小的日志信息。verbose 优先级最低

Log.d() : 打印 调试信息。debug 优先级比verbose高一级

Log.i() : 打印 一些比较重要的数据。info 优先级比debug高一级

Log.w() : 打印 警告信息。warn 优先级比info高一级
 
Log.e() : 打印 程序中的错误信息。error 优先级比warn高一级
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.hello_world_layout);
    Log.d(tag:"HelloWorldActivity",msg:"onCreate execute");
    // tag 一般传入当前的类名就好,主要用来对打印信息进行过滤
    // msg 即想要打印的具体的内容
}

打印信息

09/27 14:21:13.949 3253-3253/com.example.helloworld D/HelloWorldActivity: onCreate execute
打印时间           程序进程号  程序的包名        D代表是Log.d      tag参数   msg参数

① System.out.println() 方法打印日志的缺陷:日志打印不可控、打印时间无法确定、不能添加过滤器、日子没有级别区分等

② Android Studio 也有快捷输入。输入logw,按下Tab键,会自动补全一条 warn 级别的打印日志。

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值