Android初认识

题记

进入手游公司,公司项目使用cocos2d-x游戏引擎。发布在android和ios平台。所以需要对android进行学习。此博客作为我的学习笔记 ,也希望能帮助到正在学习android的同学。知识内容来自《第一行代码-Androids(第二版)》

Android项目结构

首先是android的项目结构解读。
我使用的环境是mac下的android studio。首先新建一个android的空项目来初步了解android的项目结构。
Android项目截图
项目中结构比较复杂,接下来我会就关键的项目结构进行解析。

  1. app ,项目中代码,资源都在这里,后续开发工作都在这个目录中;
  2. .gitignore 用来将指定的目录或文件排除在版本控制之外。
  3. bulid.gradle 全局gradle构建脚本,通常不需要修改,注意app中也有一个.gradle文件,此文件据老大说时用来控制sdk的,非常重要。
  4. grade.properties gradle配置文件,配置属性将影响项目中所有的gradle编译脚本。
  5. gradlew和gradlew.bat 在命令行中执行gradle命令,gradlew在Mac中使用。
    在所有的一级项目结构中最重要的是appbuild.gradle文件。接下来是app中的项目结构

app项目结构

  1. bulid 编译时自动生成的文件,不用关心。
  2. libs 项目中如果使用到第三方jar包,放到libs目录下,会自动添加到构建路径里去
  3. androidTest 编写安卓测试用例,进行自动话测试。
  4. main里面有java和res两个目录,java逻辑代码,res资源目录。
  5. res项目中所有图片,布局,字符串等资源,图片统一放在drawable,布局放在layout,字符串values。
  6. AndroidManifest.xml整个Android的配置文件,安卓程序中国所有四大组件都在这个文件中注册。这个文件还会给应用程序添加权限声明,会常常用到。
  7. test:用来编写Unit test测试用例,自动化测试的另一种方式
  8. .gitignore app模块内的排除版本控制的文件或目录
  9. app.iml :自动生成,不需要关心
  10. build.gradle app模块的gradle构建脚本,很重要
  11. proguard-rulers.pro 混淆规则,通常会将代码进行混淆。

AndroidManifest.xml

AndroidManifest.xml文件中能确定项目从哪个文件开始运行。AndroidManifest
.MainActiviity在AndroidManifest.xml中注册,注意在AndroidManifest.xml中注册的活动才可以使用,

<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />

在读其他人写的代码时,先要去找action.MAIN和.LAUNCHER,就可以找到这个项目的主活动。
这里解释一下:活动Android程序的门面,类似于cocos2d中的scene一样。

MainActivity

从xml中找到主活动,然后在java代码中找到对应文件
`public class MainActivity extends AppCompatActivity {

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

}`
可以看到MainActivity继承AppCompatActivity,AppCompatActivity继承于Activity,所有活动必须继承或继承Activity子类。onCreate()是必须执行的方法,其中两行代码并没有hello World字样,这是因为Android程序讲究逻辑和视图分离。所以视图子一定在R.layout.activity_main所对应的activity_main.xml中。
activity_main.xml

   <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

注意TextVIew,这是Android系统提供的控价,用于布局显示文字,注意其中text中的hello world。

项目中的资源

项目中的资源基本都在res中,看看res目录结构在这里插入图片描述
res中目录非常简单,drawable开头文件夹都是放图片的,mipmap开头文件夹放图标,values开头的文件夹放字符串,样式,颜色等配置。layout文件夹中放布局文件。mipmap开头的文件夹这么多,是为了让程序能够跟好兼容各种设备。
res/values/strings.xml

<resources>
    <string name="app_name">Litepal</string>
</resources>

两种引用它的方式
代码:R.sring.app_name
xml:@string/app_name
如果是引用图片资源就将string替换为drawable,图标换成mipmap,布局文件替换layout,以此类推。

build.gradle 文件

重头戏build.gradleAndroid Studio使用Gradle构建项目,使用DSL来声明项目设置.先从外层的build.gradle分析

buildscript {
    repositories {
        google()
        jcenter()
        
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.5.2'
        
        // 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
}

这些代码都是自动生成的,首先来分析repositories闭包中声明了jcenter()和google(),这两个都是代码托管仓库,目前jcenter仓库要关闭了,可以使用阿里云
接下来分析dependencies闭包,其中使用classpath声明了一个Gradle的一个安卓插件。因为Gradle不单单为安卓开发,java和c++,所以要申明com.android.tools.build:gradle:3.5.2这个插件。
app中的build.gradle

apply plugin: 'com.android.application'

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

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'androidx.appcompat:appcompat:1.0.2'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.0'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
    compile 'com.android.support:appcompat-v7:23.2.0'
    compile 'org.litepal.android:core:1.4.1'
}

第一行应用插件,一般有两种,com.android.application是应用程序模块,com.android.library表示是一个库模块。应用程序是一个程序,库模块是表示你做的想一个插件,等别的应用程序使用。
android闭包,这个闭包中可以配置项目中的各种属性。compileSdkVersion用于指定项目中的编译版本,30是系统生成的。buildToolsVersion用于指定构建工具的版本。在android闭包中又有一个defaultConfig闭包,defaultConfig闭包可以对项目中更多的细节进行配置
applicationId:项目的包名
minSdkVersion:项目最低兼容的安卓版本
targetSdkVersion:表示你已经在改目标版本上做了充分测试
versionCode:指定目标的版本号
versionName:项目的版本名
buildTypes闭包指定生成安装文件的相关配置通常里面有俩子闭包,一个debug一个release,debug:生成测试版安装文件
release:生成正式版安装文件的配置
minifyEnadbled:指定是否对项目代码进行混淆
proguarFiles:指定混淆时使用的规则文件。

dependencies指定当前项目所有依赖关系
三种依赖关系:本地依赖,库依赖,远程依赖。
本地依赖:可以对本地jar包或目录添加依赖关系。
库依赖:对项目中的库依赖添加依赖关系
远程依赖:对jcenter库上的开源项目添加依赖关系

implementation fileTree:本地依赖声明,表示libs目录下所有.jar后缀的文件都添加到项目构建路径当中。
implementation:远程依赖声明,androidx.appcompat:appcompat:1.0.2
其中androidx.appcompat表示域名部分,appcompat组名称用于和同一个公司中不同的库做区分,1.0.2版本号用于和同一个库不同的版本做区分。这句声明加后,Gradle在构建项目时会检查本地的缓存库,如果没有,自动去互联网下载。
库依赖:此处没有写,下篇博客中会使用到LitePal,看看是否会使用到。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值