2017-11-20 21:29:32 xhbxhbsq 阅读数 224
  • Android Studio 开发详解

    Android Studio教程,该教材会详细介绍Android Studio如何使用,包括在Windows平台下载安装Android Studio、配置、代码重构、项目调试、jar包管理等。

    10840 人正在学习 去看看 郭宏志

最近在看Android 第一行代码-第二版书籍,整理下这本书的具体内容,内容如下:


2019-02-23 11:54:33 xjl08 阅读数 1097
  • Android Studio 开发详解

    Android Studio教程,该教材会详细介绍Android Studio如何使用,包括在Windows平台下载安装Android Studio、配置、代码重构、项目调试、jar包管理等。

    10840 人正在学习 去看看 郭宏志

------>
------>>
------>>>
下载后24小时请务必删除,观看完整内容,请前往购买正版书籍
android第一行代码(第2版)_传送门

------>>>
------>>
------>

2019-04-08 10:16:45 weixin_41213648 阅读数 343
  • Android Studio 开发详解

    Android Studio教程,该教材会详细介绍Android Studio如何使用,包括在Windows平台下载安装Android Studio、配置、代码重构、项目调试、jar包管理等。

    10840 人正在学习 去看看 郭宏志

这段时间,在学习《第一行代码 Android 2版》过程中遇到了以下问题,经过各种途径都已一一解决;在此公布,仅供参考。

一、打开 Android Studio 卡在「Fetching Android SDK component information」界面。

如图:

Android Studio First Run 检测 Android SDK 及更新,由于众所周知的原因,我们会「Unable to access Android SDK add-on list」,而且大家一般也已经提前配置好了 Android SDK,真正需要更新的时候手动去 SDK Manager 更新就好了。

解决方案:

在 Android Studio 安装目录 bin/idea.properties 文件最后追加一句

disable.android.first.run=true

参考: http://ask.android-studio.org/?/article/14

二、新建工程后构建时提示找不到 appcompat-v7

Error:Failed to find: com.android.support:appcompat-v7:22.+

解决方案:

  1. 打开 SDK Manager,然后安装 Extras 下的 Android Support Repository:

  2. Rebuild 工程。

三、aidl 文件的放置

按以前 Eclipse 的方式,将 aidl 及其包目录层级放置在与自己的顶级包同级的目录下,即如下的 android/content/pm:

app/src/main
├─assets
├─java
│  ├─android
│  │  └─content
│  │      └─pm
│  └─org
│      └─mazhuang
│          └─easycleaner
└─res
   ├─drawable
   ├─layout
   ├─menu
   ...

然而这样在调用处一直报错:

Cannot resolve symbol 'IPackageStatsObserver'

解决方案:

将 aidl 文件放置在与 app/src/main/java 目录同级的 app/src/main/aidl 文件夹下。

app/src/main
├─aidl
│  └─android
│      └─content
│          └─pm
├─assets
├─java
│  └─org
│      └─mazhuang
│          └─easycleaner
└─res
   ├─drawable
   ├─layout
   ├─menu
   ...

四、在 Android Studio 里编译通过之后,命令行使用 gradlew build 为什么还是会重新下载 Gradle?

Gradle 的版本在 Android Studio 工程里有三处:

1、gradle/wrapper/gradle-wrapper.properties 文件的 distributionUrl 字段里指定的。

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-2.8-all.zip

比如这里指定的是 2.8 版本。

2、Android Studio 的 File > Project Structure > Project 里显示的。

这个实际上就是显示的「一」里的版本。

3、Android Studio 的 File > Settings > Build, Execution, Deployment > Build Tools > Gradle 里选择的是「Use default gradle wrapper (recommended)」还是「Use local gradle distribution」。

出现题目里的问题一般是由于「三」中选择的是「Use local gradle distribution」,这个选项下的「Gradle home」路径一般是指向 Android Studio 安装目录下的 Gradle 目录,比如 C:/Program Files/Android/Android Studio/gradle/gradle-2.8,而 gradlew 脚本是独立于 Android Studio 的,所以并不受其配置的影响,它是使用「一」里指定的版本,会到 ~/.gradle/wrapper/dists 目录下去寻找对应版本的 Gradle 是否已经存在,如果没有话就会去重新下载。

五、模拟器启动失败

PANIC: ANDROID_SDK_HOME is defined but could not find Nexus_5_API_23.ini file in $ANDROID_SDK_HOME/.android/avd
(Note: avd is searched in the order of $ANDROID_AVD_HOME,$ANDROID_SDK_HOME/.android/avd and $HOME/.android/avd)

实际上文件存在于 $HOME/.android/avd 目录下,但看样子如果设置了 $ANDROID_SDK_HOME 环境变量,Android Studio 在 $ANDROID_SDK_HOME/.android/avd 下找不到模拟器文件将直接报错,而不会再去找 $HOME 目录下的文件。

解决方案:

添加 $ANDROID_AVD_HOME 环境变量,值为 $HOME/.android/avd 的展开全路径。

六、debug.keystore 的存放位置

在使用高德地图 SDK 时,需要 key 与 keystore 文件的 sha1 校验通过,而我将 debug.keystore 拷贝到 $HOME/.android 目录下后发现一直提示 key 校验失败,也就是没有使用我拷贝到 $HOME/.android 目录下的 debug.keystore 来做 debug 签名。

原因是 debug.keystore 的默认存储路径是 $HOME/.android,但是如果配置了 $ANDROID_SDK_HOME,则会将 debug.keystore $ANDROID_SDK_HOME/.android 目录下。

解决方案:

将 debug.keystore 文件拷贝到 $ANDROID_SDK_HOME/.android 目录下。

BTW:

关于给 App 签名的手动、自动方法参考 Signing Your Applications

Android Studio 自动生成的 debug.keystore 的信息:

  • Keystore password: android
  • Key alias: androiddebugkey
  • Key password: android

七、一直提示 Please configure Android SDK

这是在一次电脑断电后出现的,试了一些方法,更新 Android Studio,将 SDK Platforms 删除了重新下,都不行,后来发现 Build Tools 可以更新,更新完后就好了。

More than one file was found with OS independent path

比如,在 netty-buffer-4.1.5.Final.jar 与 netty-common-4.1.5.Final.jar 中都有 META-INF/io.netty.version.properties,所以编译时报错:

More than one file was found with OS independent path 'META-INF/io.netty.versions.properties'

解决方案:

在 app/build.gradle 里添加如下内容:

android {
    packagingOptions {
        pickFirst 'META-INF/*'
    }
}

表示只保留一份该文件。

参考:Android Studio: Duplicate files copied in APK META-INF/DEPENDENCIES when compile

八、打开 uiautomatorviewer 报错

打开 uiautomatorviewer 报错,提示:

Unable to connect to adb. Check if adb is installed correctly.

实际 adb 命令是可正常使用的。

解决方法:

打开 uiautomatorviewer.bat 文件(Windows 下,其它系统可能是 .sh),找到下面这行(一般是最后一行):

call "%java_exe%" "-Djava.ext.dirs=%javaextdirs%" "-Dcom.android.uiautomator.bindir=%prog_dir%" -jar %jarpath% %*

将其中的 %prog_dir% 改为 Android SDK 的 tools 目录路径,比如:

call "%java_exe%" "-Djava.ext.dirs=%javaextdirs%" "-Dcom.android.uiautomator.bindir=D:\Android\sdk\tools" -jar %jarpath% %*

参考:In UI automator viewer Error Obtaining Device screenshot, Reason : Error Unable to connect to adb. Check if adb is installed correctly

九、is not translated in “zh”

报错信息:

Error: "app_name" is not translated in "zh" (Chinese) [MissingTranslation]

在引用了 Umeng 的 SDK 后编译报错,疑是 Umeng 包里的 values-zh 导致。

解决方案 1:

<?xml version="1.0" encoding="utf-8"?>
<resources
  xmlns:tools="http://schemas.android.com/tools"
  tools:ignore="MissingTranslation" >

解决方案 2:

在主项目的 build.gradle 里添加如下代码:

android {
    lintOptions {
        checkReleaseBuilds false
        abortOnError false
    }
}

参考:

十、一直卡在 Gradle:Resolve dependencies’app:debugCompile’

这种情况一般是 Gradle 去拉取某个 dependencies 的时候连不上导致。

一种方法是如果本地有能编译通过的其它工程,修改 compileSdkVersion 和 buildToolsVersion 及 dependencies 里的版本为能编译通过的工程的版本;另一种方法是将对应的依赖包 jar 下载到本地放到 libs 里面;还有一种思路是修改 jcenter() 为其它可用的源。

十一、更新到 Android Studio 3.0 后报错

提示信息:

Unable to resolve dependency for ':internal@packagingOptions/compileClasspath': Could not resolve project :commonlib.

Could not resolve project :commonlib.
Required by:
    project :internal
 > Unable to find a matching configuration of project :commonlib:
     - Configuration 'debugApiElements':
         - Required com.android.build.api.attributes.BuildTypeAttr 'packagingOptions' and found incompatible value 'debug'.
         - Required com.android.build.gradle.internal.dependency.AndroidTypeAttr 'Aar' and found compatible value 'Aar'.
         - Found com.android.build.gradle.internal.dependency.VariantAttr 'debug' but wasn't required.
         - Required org.gradle.api.attributes.Usage 'java-api' and found compatible value 'java-api'.
     - Configuration 'debugRuntimeElements':
         - Required com.android.build.api.attributes.BuildTypeAttr 'packagingOptions' and found incompatible value 'debug'.
         - Required com.android.build.gradle.internal.dependency.AndroidTypeAttr 'Aar' and found compatible value 'Aar'.
         - Found com.android.build.gradle.internal.dependency.VariantAttr 'debug' but wasn't required.
         - Required org.gradle.api.attributes.Usage 'java-api' and found incompatible value 'java-runtime'.
     - Configuration 'releaseApiElements':
         - Required com.android.build.api.attributes.BuildTypeAttr 'packagingOptions' and found incompatible value 'release'.
         - Required com.android.build.gradle.internal.dependency.AndroidTypeAttr 'Aar' and found compatible value 'Aar'.
         - Found com.android.build.gradle.internal.dependency.VariantAttr 'release' but wasn't required.
         - Required org.gradle.api.attributes.Usage 'java-api' and found compatible value 'java-api'.
     - Configuration 'releaseRuntimeElements':
         - Required com.android.build.api.attributes.BuildTypeAttr 'packagingOptions' and found incompatible value 'release'.
         - Required com.android.build.gradle.internal.dependency.AndroidTypeAttr 'Aar' and found compatible value 'Aar'.
         - Found com.android.build.gradle.internal.dependency.VariantAttr 'release' but wasn't required.
         - Required org.gradle.api.attributes.Usage 'java-api' and found incompatible value 'java-runtime'.

情况是有一个叫 internal 的 project 依赖一个叫 commonlib 的 module,最后查到原因如下:

internal project 的 build.gradle 文件里写了这么一段:

android {
    ...
    buildTypes {
        debug {
            signingConfig signingConfigs.release
        }
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.release
        }
        packagingOptions {
            exclude 'META-INF/INDEX.LIST'
            exclude 'log4j.xml'
        }
    }
}

实际 packagingOptions 应该放到 buildTypes 之外,改成这样就 OK 了:

android {
    ...
    packagingOptions {
        exclude 'META-INF/INDEX.LIST'
        exclude 'log4j.xml'
    }

    buildTypes {
        debug {
            signingConfig signingConfigs.release
        }
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.release
        }
    }
}

以前曾经通过这样修改临时掩盖了问题,让编译能过:

dependencies {
    ...
    implementation project(path: ':commonlib', configuration: 'default') // 临时方案
    // implementation project(':commonlib')  // 原来的样子
}

这样修改编译能通过,但是会有个问题,就是在 internal project 工程里调用 commonlib 的方法的地方,Ctrl + 鼠标左键,或者右键 Go To Declaration 时会跳到 ~/.gradle/caches/transforms-1/files-1.1/commonlib-release.aar 目录里的 .class 文件,而非 .java 源文件。

回答在 StackOverflow 的一个问题 下。

十二、启动模拟器提示 Intel HAXM is required to run this AVD your CPU does not support VT-x

我使用 Win10 系统,换主板之后遇到的,之前模拟器是能正常运行的。

我遇到的原因是 Hyper-V 的影响,导致无法安装 HAXM,虽然在 msconfig 里查看我的 Hyper-V 服务都已经停止,我在 BIOS 里也已经 Enable 了 Virtualization Technology 相关的选项,仍然报相同的错误。

解决步骤参考 http://blog.csdn.net/WangZuoChuan/article/details/54620016

  1. 打开管理员权限的 CMD

  2. 运行 bcdedit /copy {current} /d “Windows10 no Hyper-V

    这时会输出一个 UUID

  3. 执行 bcdedit /set {XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX} hypervisorlaunchtype OFF

    将 XXX 部分换成步骤 2 里输出的 UUID

  4. 在 msconfig 的「引导」里将 Windows 10 no Hyper-V 设为默认

  5. 重启

十三、Android Studio 里对所有 Activity 显示警告

警告信息:

methods findViewById(int) from android.app.Activity and findViewById(int) from android.support.v7.app.AppCompatActivity are inherited with the same signature

解决方案:

项目里有几个模块,有的 compileSdkVersion 和 targetSdkVersion 是 25,有的是 26,全部改成 26 并把 appcompat-v7 等 dependencies 也改成 26 对应版本后问题消失。(但诡异的是我后来改回 25 想复现一下,问题却不再出现了)

十四、Plugin with id ‘com.android.application’ not found

导入一个别人做的工程的时候遇到报错:

Error:(1, 0) Plugin with id 'com.android.application' not found

怀疑是使用比较老的版本的 Android Studio 创建,该工程只有一个 build.gradle 文件——我们平时创建的工程应该是有两个,一个 Project 级别的,一个 Module 级别的。

它是只有一个 Project 级别的 gradle 文件,但是内容却是 Module 级别 gradle 文件的内容。

后来在 StackOverflow 上找到 解决方案

在 build.gradle 文件顶部添加如下代码(注意 Gradle 版本与 Gradle Plugin 的版本对应):

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

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

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

十五、升级后 Gradle sync 出错

从 Android Studio 3.0.1 升级到 3.1 的时候,Check for Updates... 提示超时,于是挂了代理升级。但是升级完成之后,打开以前能顺利构建的工程,提示 Cause: jcenter.bintray.com:443 failed to respond,怀疑是代理的原因,于是在 Settings 里将 HTTP Proxy 选项改为以前的 no proxy,报错变成 Connection refused: connect,搜索了一番之后找到 这个,依提示打开 ~/.gradle/gradle.properties,发现里面果然还存在代理的设置信息,删除之后重启 Android Studio,问题解决。

十六、Generate JavaDoc 提示“错误: 编码GBK的不可映射字符”

所有相关文件的编码都是 UTF-8,在 Android Studio 里没有找到设置 JavaDoc 相关的编码设置项,于是在 Generate JavaDoc 时弹出的 Specify Generate JavaDoc Scope 对话框的 Other command line arguments 一项里填入 -encoding utf-8 -charset utf-8,问题解决。

android-studio-javadoc

 

十七、升级 Gradle Plugin 版本后报错

The SourceSet 'instrumentTest' is not recognized by the Android Gradle Plugin. Perhaps you misspelled something?

android { sourceSets { } } 里的 instrumentTest.setRoot(...) 改为 androidTest.setRoot(...) 后问题解决。

十八、编译报错 Error:Execution failed for task ‘:app:transformClassesWithDexForRelease’

我这里的原因是一个 APP 依赖一个 Module,这两个使用了相同的包名,将 APP 的包名改了之后问题解决。

十九、升级到 3.1 后编辑 Gradle 文件卡顿

不止是卡顿……基本上就是整个 Android Studio 卡住几十秒没办法动的那种。在网上搜索之后发现遇到这种问题的网友还挺多,果然是垃圾软件毁我青春 :-P。

参考 https://blog.csdn.net/wangluotianxi/article/details/79757558,卡顿原因是编辑 Gradle 文件过程中一直在请求下面两个接口:

http://search.maven.org/solrsearch/select?q=g:%22com.google.android.support%22+AND+a:%22wearable%22&core=gav&rows=1&wt=json
http://search.maven.org/solrsearch/select?q=g:%22com.google.android.gms%22+AND+a:%22play-services%22&core=gav&rows=1&wt=json

而且,结果返回之前会卡住界面,而我们的网络访问这俩网址基本只能等到超时返回了,所以,临时解决方案是在 hosts 文件里添加如下内容,让这俩请求快速失败返回:

127.0.0.1 search.maven.org

暂未发现对正常功能有影响。

二十、编译报错 You should manually set the same version via DependencyResolution

Android dependency ‘org.mazhuang:commonlib’ has different version for the compile (0.0.4) and runtime (0.0.5) classpath. You should manually set the same version via DependencyResolution

Project A 使用了 Module B,A 依赖 commonlib(0.0.4),而 Module B 里引用了 commonlib(0.0.5),将 A 也改为依赖 commonlib(0.0.5) 即可。

二十一、编译报错 Please use JDK 8 or newer

Gradle Sync 的时候无法成功,报错

Gradle sync failed: Please use JDK 8 or newer

尝试 Rebuild 报错

Supplied javaHome is not a valid folder.

原因是我在 Project Settings 的 SDK Location 里手动指定了 JDK 的版本,但是后来升级了 JDK,所以原有路径失效了。

解决方法是将 Project Settings 的 SDK Location 里 JDK 的路径改为正确路径,或者省事起见可以直接勾选 Use embedded JDK 即可。

二十二、编译报错 Caused by: java.io.IOException: Cannot run program

提示找不到 NDK 工具链里的 mips64el-linux-android-strip,导致 Caused by: java.io.IOException: error=2

原因是 NDK r17 移除了对 ARMv5(armeabi)、MIPS 和 MIPS64 的支持,所以对应的工具链也没有了。

解决办法有几种:

  1. 检查 Gradle Plugin 的版本,即 project 级别的 build.gralde 文件里

     dependencies {
         classpath 'com.android.tools.build:gradle:3.1.3'
         ...
     }
    

    com.android.tools.build:gradle 的版本改为 3.1 以上。

  2. 将 NDK 版本退回 16b,或将 16b 以下的对应 mips 工具链的文件夹拷贝到 r17 的对应目录下。

                                            

扫码关注本人微信公众号,有惊喜奥!公众号每天定时发送精致文章!回复关键词可获得海量各类编程开发学习资料!

例如:想获得Python入门至精通学习资料,请回复关键词Python即可。

 

2018-09-07 19:04:49 weixin_41903771 阅读数 359
  • Android Studio 开发详解

    Android Studio教程,该教材会详细介绍Android Studio如何使用,包括在Windows平台下载安装Android Studio、配置、代码重构、项目调试、jar包管理等。

    10840 人正在学习 去看看 郭宏志

        我使用的是最新版的Android studio 3.1.2版本,所以有部分内容与定义与书中的不同。希望在以后的时间里我能够想起来为这篇博客续命

目前正在跟着书学习,所以会慢慢更新,不会一下子编辑完成。

我自己犯的错误

1、UIBestPractice项目里

  • p137。在运行的时候,发现RecyclerView是一页一个消息框,经过检查,发现是msg_item.xml布局里的最外层的LinearLayout的height设置错误,应该设置为wrap_content,而我设置成了match,导致了一个屏幕一条消息。改正后正常显示。
  • p139。运行时不显示消息框。检查MainActivity。发现是布局管理器没有设置。如下两行没有加入。
LinearLayoutManager layoutManager = new LinearLayoutManager(this) ;
msgRecyclerView.setLayoutManager(layoutManager);

 

书中的错误

第一处:p137,书下方的TextView标签里的textColor没有进行设置,导致了运行的时候发送端的消息显示不是来。

 

2018-11-21 17:22:58 lhk147852369 阅读数 4894
  • Android Studio 开发详解

    Android Studio教程,该教材会详细介绍Android Studio如何使用,包括在Windows平台下载安装Android Studio、配置、代码重构、项目调试、jar包管理等。

    10840 人正在学习 去看看 郭宏志

目录:

1.1 了解全貌——Android王国简介

1.1.1 Android 系统架构

1.1.1 Android 已发布版本

1.1.3 Android 应用开发特色

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

1.2.1 准备所需要的工具

1.2.2 搭建开发环境

1.3 创建你的第一个Android项目

1.3.1 创建HelloWorld项目

1.3.2 启动模拟器

1.3.3 运行HelloWorld

1.3.4 分析你的第一个Android程序

1.3.5 详解项目中的资源

1.3.6 详解build.grdle文件

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

1.4.1 使用Android的日志工具

1.4.2 为什么使用Log而不是用System.out

1.5 小结与点评


知识点:

1.1 了解全貌——Android王国简介

Android从面试以来已经发布了二十几个版本了,在这几年的发展过程中,谷歌建立了一个完整的生态系统。手机厂商,开发者,用户之间相互依赖,共同推荐Android的蓬勃发展。

1.1.1 Android 系统架构

Android大致分为四层架构:

Linux内核层:底层驱动,如显示,音频,相机驱动等

系统运行库层:通过C/C++库为Android系统提供特性支持(虚拟器,OpenGl|ES库,WebKit等)

应用框架层:提供各种API

应用层:所有安装在手机上的应用程序都是属于这一层的,如系统自带的联系人,短信等程序。

1.1.1 Android 已发布版本

1.1.3 Android 应用开发特色

  1. 四大组件
  2. 丰富的系统控件
  3. Sqlite数据库
  4. 强大的多媒体
  5. 地理位置定位

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

1.2.1 准备所需要的工具

1.2.2 搭建开发环境

1.3 创建你的第一个Android项目

1.3.1 创建HelloWorld项目

1.3.2 启动模拟器

1.3.3 运行HelloWorld

详细请看:https://blog.csdn.net/m0_37240709/article/details/76069176

1.3.4 分析你的第一个Android程序

项目结构

  • .gradle和idea:放置的都是Android Studio 自动生成的一些文件,无需关心
  • app:项目中的代码,资源等
  • build:包含了一些在编译时自动生成的文件,无需关心
  • gradle:包含了gradle wrapper配置文件,会自动根据缓存情况决定是否联网下载gradle。Android Studio默认没有启动gradle wrapper方式,如果需要打开,可以点击 导航栏-File-Settings-Build,Execution,Deployment-Gradle,进行配置
  • .gitgnore:用来指定的目录或文件排除在版本控制之外的
  • build.gradle:项目全局的gradle构建脚本
  • gradle.properties:是全局的gradle配置文件
  • gradlew和gradlew.bat:用来在命令行执行gradle命令的,其中gradlew是在Linux或Mac中使用的,gradlew.bat是在Window系统使用的
  • HelloWorld.iml:自动生成的,用于表示这是一个IntelliJ IDEA项目
  • local.propeties:指定本机的Android Sdk路径
  • setting.gradle:指定项目所有的引用模块

1.3.5 详解项目中的资源

所有以drawable开头的文件用来放图片的,所有以mipmap开头的文件夹用来放应用图标的

程序运行后会根据屏幕的分辨率加载哪个文件下的内容

1.3.6 详解build.grdle文件

不同于Eclipse,Android Studio 是采用Gradle来构建项目的,它使用了一种基于Groovy的领域特定语言(DSL)来声明项目设置,摒弃了传统基于xml(如Ant和Maven)的各种烦琐设置。

最外层目录下的build.gradle文件,代码如下:

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

    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}


       这些代码都是自动生成的,通常情况下不需要修改这个文件中的内容。两处repositories闭包中都声明了jcenter(),jcenter是一个代码托管仓库,从而使得我们在项目中可以引用任何jcenter上的开源项目。dependencies闭包中使用classpath声明了一个Gradle插件,因为Gradle并不是专门为构建Android项目而开发的,Java、C++等很多种项目都可以使用Gradle来构建。如果想要使用Gradle来构建Android项目,则需要声明com.android.tools.build:gradle:2.3.3这个插件,其中,后面是插件的版本号。

        app目录下的build.gradle文件,代码如下:

apply plugin: 'com.android.application'

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

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:26.+'
    testCompile 'junit:junit:4.12'
}


        首先第一行应用了一个插件,一般有两种值可选:com.android.application表示这是一个应用程序模块;com.android.library表示是一个库模块。应用程序模块是可以直接运行的,库模块只能作为代码库附于在别的应用程序模块来运行。

android闭包:

compileSdkVersion:指定项目的编译版本。

buildToolsVersion:指定项目构建工具的版本。

defaultConfig闭包:

applicationId:指定项目的包名

minSdkVersion:指定项目最低兼容的Android系统版本

targetSdkVersion:指定项目的目标版本

versionCode:指定项目的版本号

versionName:指定项目的版本名

buildTypes闭包:

通常只会有两个子闭包:debug和release。其中debug闭包可以忽略不写。debug闭包用于指定生成测试版安装文件的配置;release闭包用于指定生成正式版安装文件的配置。

release闭包

minifyEnabled:指定是否对项目的代码进行混淆。

proguardFiles:指定混淆时使用的规则文件。proguard-android.txt是在Android SDK目录下,里面是所有项目通用的混淆规则;proguard-rules.pro是在当前项目的根目录下,里面可以编写当前项目特有的混淆规则。

dependencies闭包

指定当前项目所有的依赖关系。

compile fileTree:声明本地依赖,表示将libs目录下所有.jar后缀的文件都添加到项目的构建路径中。

compile:声明远程依赖。

testCompile:声明测试用例库。

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

1.4.1 使用Android的日志工具

日志工具类是Log(android.util.log)

  • Log.v():打印最为琐碎、意义最小的日志信息
  • Log.d():打印调试信息
  • Log.i():打印比较重要的数据
  • Log.w():打印警告信息
  • Log.e():打印错误信息

1.4.2 为什么使用Log而不是用System.out

System.out缺点:打印不可控制,打印时间无法确定,不能添加过滤器,日志没有级别区分。。。

那么Log就把Syso的所有缺点都改掉了吗?虽然谈不上全部,但我觉得已经做得相当不错了。

同时我们也可以通过Logcat配置打印信息 过滤器等。

1.5 小结与点评

郭霖总结:

你现在一一定会觉得很充实,甚至有点沾沾自喜。确实应该如此,因为你已经成为一-名真正的Android开发者了。通过本章的学习,你首先对Android 系统有了更加充足的认识,然后成功将Android开发环境搭建了起来,接着创建了你自己的第一一个 Android项目,并对Android项目的目录结构和执行过程有了一定的认识, 在本章的最后还学习了Android日志工具的使用,这难道还不够充实吗?

      不过你也别太过于满足,相信你很清楚,Android 开发者和出色的Android 开发者还是有很大的区别的,你还需要付出更多的努力才行。即使你目前在Java 领域已经有了不错的成绩,我也希望在Android的世界你可以放下身段,以一只萌级小菜鸟的身份起飞,在后面的旅途中你会不断地成长。

      现在你可以非常安心地休息一段时间, 因为今天你已经做得非常不错了。储备好能量,准备进人到下一章的旅程当中。

我的总结:

因为本身就是在做Android程序,所以第一章对于我来说,又加深了一些印象。

没有更多推荐了,返回首页