一、问Android studio目录结构
答:最外层的priject目录结构
1、gradle:这里包含了一些gradle编译的一些脚本,gradle是谷歌推荐的一种编译脚本,它的底层是*
2、.idea:这里包含了我们Android studio工具所需要的文件,例如版权的声明啊、词典的介绍、库的使用、配置文件等。
3、app:这是我们的mudlu文件,我们编写的代码和布局等文件都会存放在此文件包中,
4、build:是我们编写的代码编译之后所生产的一些文件。这些生成的文件就会存放在build文件夹中。例如生成的apk、java文件等。
5、.gradle:里面包含了一个wrapper文件包,这是Android对我们的gradle进行一层封装,因为gradle更新的很快,要比Android studio更新的速度快很多。为了兼容性,谷歌对出了一个gradle的wrappe文件,他会更新以前一些旧版本的gradle。
6、.gitignore:和我们git工具有关系,这是git上传是 **配置的指定的那些不要上传的文件,在这里可以配置。
7、build.gradle:这里面做的就是一些配置相关的文件。
8、gradle.properties这里面做的也是一些配置文件,但是这里的属性是全局的,它实用与整个modelu。
9、gradiew这是一个可执行文件,这是linux下的可执行文件,而下面的gradiew.bat是window下可以执行的文件。
10、local.properties这是一些本地属性的设置,这个文件也是不推荐生上传到我们本地仓库的一个文件。
11、settings.gradle这是和设置相关的,gradle一些脚本就可以在这里配置。
- mudole结构
1、build文件包:生成我们编译后文件的所在位置,这里所针对的知识我们mudole的app,也包括一些apk和一些临时文件,
2、libs:这里主要存放一些第三方的jar文件和arr包
3、src:这里包括了一些我们自己编写的代码和布局文件。
4、build.gradle文件:这是跟我们的项目模块,有关的gradle配置。例如一些我们编译的版本、app的版本等。
5、proguard-rules.pro:是有关代码混要的一些配置文件。
二、git容易混淆的两个概念。
答:
工作区的概念:工作区就是我们在电脑中看到的文件目录,比如我们的project就是一个工作区。而我们工作区一个隐藏的目录叫做.git,这里面存放的是我们一些git版本库的内容,
.gitignore文件:这里面可以配置一些我们不想上传到版本控制工具的文件,
三、git一些常用的git命令。
git init命令:创建git仓库。当我们调用了此命令之后,发现目录下会多一个.git的隐藏目录,这目录里面放置的就是我们git的版本。
git status命令:可以查看我们当前仓库的一些状态。
git diff命令:后面要价格文件名称,这是我们就可以看到我们这一次和上一次到底修改了那些内容。他会给我们以标注的形式展示出来。
git add命令:后面加我们的文件名称,这就是说我会吧我们现在索要添加的文件放到我们的栈存中,注意是栈存区,而不是放到我们的代码仓库当中。
git commit命令:我们吧刚才git add的文件,提交到我们的代码区域中,
git clone命令:我们从一个远程的仓库,克隆一分代码到我们本地中,后面一般会加我们的git地址,
git branch命令:可以查看当前的分支到底是什么。
git checkout命令:我们而已切换分支,
四、git两种工作流。(fork/clone)
- 1、fork形式:
第一步:首先以fork工作流的形式,会从GitHub远程仓库以fork的形式复制一份到我们自己的远程仓库当中,复制好的仓库并不是在我们本地,而是保存在我们的远程仓库中。这个时候我们的计算机本地没有对这个仓库做任何操作。
第二步:clone仓库,这个操作会让你的代码的远程仓库发送一份复制文件到自己的本地电脑上面,这个时候远程仓库中的代码就会复制一份到本地电脑中,
第三部:update操作,可以更新某些文件。
第四步:你可以Commit文件,也提交代码,这里提交到的位置是你自己的本地仓库中,
第五步:push,把自己本地仓库中的代码提交到自己远程仓库中。push不是自动完成,需要手动操作
第六步:Pull request形式,把自己远程仓库中的代码提交到项目的远程仓库中,这个时候你要发送一个Pull request命令,管理员就会看到你发送的代码,管理员会核实你的代码,如果你的代码没有问题,就会吧代码合到我们的仓库中。
- 2、clone形式:
节省了自己的远程仓库,直接本地仓库和远程仓库进行对接。缺少了代码的管理员这一环节
五、建项目会创建几个gradle文件。。
答:三个,project下的build.gradle、setting.gradle、以及我们的app包中的build.gradle。
- 1、project目录下的build.gradle用处:一般会包含两个代码快,一个是buildscript,一个是allprojects
buildscript {
repositories {//repositories 就是我们的一个代码仓库,
jcenter()//很有名的代码库
}
//代码快在构建过程中,所需要依赖那些包,这就意味着,你不能将你的应用或所依赖的包,包含在顶层的依赖文件中,因为默认情况下,这里唯一定义的依赖包,是gradle的安卓插件,比如下面:
dependencies {
classpath 'com.android.tools.build:gradle:2.2.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
}
- 2、setting.gradle用处:只包含在一个android的项目当中,如果是单项目开发,这个文件可有可以,如果多某块开发就需要setting.gradle来,编制一定的规则,让我们的业务逻辑开发更有条理。如图01,下面就有两个模块,是在我们的构建范围之内。如下图表示:我们的项目是有app、calendar、MPChartlib三个个模块组成。
- 3、app包中的build.gradle: 这个文件属于我们自己app模块的,他可以覆盖我们顶层中project中build.gradle中的任何属性,这个文件也是有两个大部分组成,一、android 。二、dependencies
//安卓的插件,官方提供的,负责我们测试、打包我们的项目
apply plugin: 'com.android.application'
//包含了我们安卓全部的所需要特有的配置,这些配置之所以可以被使用,是因为我们第一行中插入了我们安卓的插件,他有很多属性,必备的是第二行、第三行、
android {
compileSdkVersion 25-----api的版本号。必备存在
buildToolsVersion "25.0.3"---------------------------构建和编译使用的版本号
//整个代码应用的核心属性,这个里面配置的属性。
defaultConfig {
applicationId "andengcom.com.andeng"
minSdkVersion 22
targetSdkVersion 25
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(include: ['*.jar'], dir: 'libs')
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:25.3.1'
testCompile 'junit:junit:4.12'
compile project(':Librarys')
compile 'com.lzy.net:okgo:2.1.4'
compile 'com.google.code.gson:gson:2.8.1'
compile files('libs/volley.jar')
// compile files('src/main/java/andengcom/com/andeng/util/nineoldandroids-2.4.0.jar')
compile files('libs/org.apache.http.legacy.jar')