AndroidStudio: 是Google官方基于IntelliJ IDEA开发的一款Android应用开发工具,,类似之前的eclipse,但是比eclipse 强大很多,推荐使用;
Gradle:是一个工具,同时它也是一个编程框架。使用这个工具可以完成app的编译打包等工作;安装位于:Windows C:\Users\计算机名.gradle\wrapper\dists
LInux/Mac: /home/user_name/.gradle\wrapper\dists
compileSdkVersion、buildToolsVersion、minSdkVersion和targetSdkVersion的含义作用
- compileSdkVersion 25
SDK的版本号,也就是API Level,例如API-19、API-20、API-21等等。建议选择最新版本号。
- buildToolsVersion"25.0.3"
构建工具的版本,其中包括了打包工具aapt、dx等等。这个工具的目录位于..your_sdk_path/build-tools/XX.XX.XX
如何查看本地版本?
可以用高版本的build-tool去构建一个低版本的sdk工程,例如build-tool的版本为20,去构建一个sdk版本为18的
例如:compileSdkVersion 18
buildToolsVersion "22.0.1"这样也是OK的。
可通过SDK Manager->SDK Tools->Android SDK Build Tools,勾选show package details查看,例如:25.0.3。
- targetSdkVersion 23
假设某API 在SDK <=23 和 SDK > 23 表现不一样,若工程设定了该值,对于SDK > 23 的新手机,会执行旧版本api 逻辑。
详情请点击这里
一般情况下,如果没有测试各种机型版本兼容性的情况下,不建议修改此值。
- minSdkVersion 15
apk最低支持的系统版本号,这个好理解
- compile 'com.android.support:support-v4:25.3.1'
与compileSdkVersion大版本号相同,如25.x.y,至于x.y具体数字不是随便填的,需要与谷歌发布版本匹配。
小结:
1、compileSdkVersion和buildToolsVersion作用于项目的编译,compileSdkVersion设置为最新的SDK版本比较好,
2、minSdkVersion和targetSdkVersion控制项目的运行版本。
3、buildToolsVersion的版本需要 >= CompileSdkVersion >= targetSdkVersion
版本号取值/设置
AndroidStudio相对于Eclipse,摒弃了在AndroidManifest设置版本的做法,如果要修改版本号和版本名称,应该在根project的build.gralde设置,请看说明:
项目结构图:
①在AS的世界里,文件夹都以模块(module)为单位组织的,只不过在项目组织中,project是个root module而已。
既然project也是模块,module也是模块,那么他们就有共同的东西,在AS中,XXX.iml、build.gradle以及build文件夹就是模块共同的。
②以.开头的基本上就不用理会了,比较重要的是:gradle文件夹是gradle wrapper,local.properties是配置SDK,NDK路径的,而settings.gradle是一个很重要的文件,用于描述改project注册了哪些module。
使用gradle构建Android应用时,你总是需要这样一个文件:build.gradle。gradle是基于groovy语言的,不过如果只是用它构建普通的工程的话,是可以不去学groovy的,如果想深入的做一下自定义的构建插件,可以考虑学一下groovy,因为它是基于Java的,所以你有java基础的话,学习不会很难。
settings.gradle
settings.gradle实在初始化阶段被读入的,读入以后会生成一个Settings对象,然后会调用这个对象的一些方法。你没有必要了解这个对象,你知道它的存在对你理解项目构建的过程有所帮助。
如果一个新的工程只包含一个android app,那么settings.gradle应该是这样的:
include ':app'
如果你的工程里只有一个 app,那么settings.gradle文件可以不要。include ':app'中的app指明你要构建的模块名,android studio默认的模块名师app,你可以把app目录的名字改掉,比如改成hello,那么这个时候你就必须把settings.gradle中的app也改成hello。
顶层的build.gradle脚本。这个文件中配置内容将会应用到所有modules中(上一步我们已经创建了两个module了,一个hello,一个gradletest2)。所以,每个module中都有的共同的属性,都会在顶层的build.gradle中配置。
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.0.0'
// 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
}
子工程下的build.gradle
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "23.0.3"
defaultConfig {
applicationId "com.konka.gradletest"
minSdkVersion 16
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.3.0'
}
第一行是一个statement,调用了apply方法,这个方法的定义如下:
void apply(Map<String, ?> options);
它的作用是检查gradle有没有所声明的这个插件,有就什么都不做,没有的话就会使插件可用。
具体的每一个script block,它们大部分都是都是方法,都可以在android studio 中按住ctrl+鼠标左键,点进去看它的声明,每个方法都有注释来解释它的作用。
android block
android 是这个脚本中最大的块,它包含了andoird特有的插件,这些插件可以使用是因为之前调用了
apply plugin: 'com.android.application',
此外,这里设置了编译android用的参数,构建类型等。
dependencies block
dependecies也是一个接受闭包作为参数的方法,这里设置了编译当前的app的依赖。如果当前app依赖外部的包,可以把这个包放到libs目录下面,然后右键,选择add as library,然后就会在这里生成一条compile ' ... '的记录。
一、build.gradle文件
//声明构建的项目类型,application表示主程序,子库表示如: apply plugin: 'com.android.library'
apply plugin: 'com.android.application'
//设置编译android项目的参数
android {
compileSdkVersion 22
buildToolsVersion "22.0.1"
defaultConfig {
// applicationId "默认包名"
minSdkVersion 9
targetSdkVersion 22
//versionCode 229
//versionName "2.2.9"
}
/**
*Android默认配置,建议不写,直接用系统默认的配置
*/
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
/**
*如果.so文件跟Eclipse一样放在了libs文件夹下就需要加上这一行代码
*/
jniLibs.srcDirs = ['libs']
}
//测试所在的路径,这里假设是tests文件夹,没有可以不写这一行
instrumentTest.setRoot('tests')
}
/*** 签名设置*/
signingConfigs {
myConfig {
storeFile file("F:\\123.keystore");
keyAlias "123"
keyPassword "123456"
storePassword "123456"
}
}
/**
*调用本地aar文件
*/
repositories {
//mavenLocal()
//mavenCentral()
flatDir {
dirs 'libs'
}
}
/*** 渠道打包*/
productFlavors {
xxx {//渠道名
applicationId "修改的包名"
versionName "2.2.9"
versionCode 229
}
xxx1 {//渠道名
applicationId "修改的包名"
versionName "2.2.9"
versionCode 229
}
}
/**
* 替换AndroidManifest.xml的BaiduMobAd_CHANNEL_VALUE字符串为渠道名称格式
* <meta-data
* android:name="BaiduMobAd_CHANNEL"
* android:value="${BaiduMobAd_CHANNEL_VALUE}" />
*/
productFlavors.all { flavor ->
flavor.manifestPlaceholders = [BaiduMobAd_CHANNEL_VALUE: name]
}
/**
* 混淆设置
*/
buildTypes {
release {
signingConfig signingConfigs.myConfig
minifyEnabled true//是否混淆
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
debug {
signingConfig signingConfigs.myConfig
minifyEnabled true//是否混淆
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.android.support:appcompat-v7:22.2.1'
compile(name: 'pulltorefresh', ext: 'aar')
}
在此需要说明的是,需要注意build文件里面方法的顺序。如果在在方法体中用到我们书写的方法的话,该方法必须放在用到的方法的后面。
二、.so文件的处理
//Android默认配置
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
/**
*如果.so文件跟Eclipse一样放在了libs文件夹下就需要加上这一行代码
*/
jniLibs.srcDirs = ['libs']
}
//测试所在的路径,这里假设是tests文件夹,没有可以不写这一行
instrumentTest.setRoot('tests')
}
(2)android studio的默认配置为:
1.在“src/main”目录中新建名为“jniLibs”的目录;
2.将so文件复制、粘贴到“jniLibs”目录内。
三、aar文件与jar文件
对于项目依赖 android library的话,就不是依赖一个jar,那么简单了,在这里需要使用gradle mulit project 机制。在过去,android library并没有一个很好的包管理方式,简单来说,在gradle出现以前,官方并没有一种用于管理android library 依赖包的方式,一般我们都是直接下载别人的android library project 源码进行集成,而对于第三方的android-maven-plugin 用的是apklib 格式。
而现在,官方终于推出一种android library的打包格式,扩展名为*.aar。前面提到,目前android gradle插件并不支持本地直接使用*.aar文件,不过,支持包管理库的引用方式,下面,我为大家说一下,怎么对android library 发布使用。
打包android library
对android library 进行打包直接在library项目下面使用gradle build 即可,然后,你就会在 build/outputs/aar 目录下看到两个*.aar文件,一个debug包用的,一个是release 下用的,看个人需求使用,这里我们用的是release 版本的 .aar 文件。
引用脚本跟前面讲的依赖库相似
dependencies {
compile(name: 'pulltorefresh', ext: 'aar')
}
pulltorefresh为我们library生成aar文件的名字。关于library的创建和添加,在此不做赘述。
(1)aar与jar的区别
*.jar:只包含了class文件与清单文件,不包含资源文件,如图片等所有res中的文件。
*.aar:包含所有资源,class以及res资源文件全部包含
*.aar:有两种方式,分别为本地加载以及网络加载,由于网络加载涉及到发布到mavenCentral托管的问题这里不做讨论;在这里给大家说一种本地加载的方式,简单快捷。
这里演示的aar文件为:”pulltorefresh.aar“
aar需要拷贝到“libs”文件夹下,gradle配置为
/**
*调用本地aar文件
*/
repositories {
//mavenLocal()
//mavenCentral()
flatDir {
dirs 'libs'
}
}
dependencies {
compile(name:'pulltorefresh', ext:'aar')
}
四、打包
现在,终于到了最后一步,自动多渠道修改包名打包(听着就高大上【偷笑】)。现在自动打包也有两种方法。
(1)手动触发
跟普通打包一样,最后选择渠道时,按住“shift”点击全部选中,确定,你就可以关闭屏幕,下班了。第二天早晨来收获结果。
(2)代码自动运行
点击studio面板上的“Terminal”或者“cmd”进入到当前工程的根目录下执行gradlew assembleRelease命令自动进行多渠道打包。还有一个类似的命令:gradlew assembleDebug想必通过名字,就能到猜测出。
注意:第一次执行打包命令的时候,会自动下载一些与打包相关的文件。
最后,打包完成的apk在哪呢?这也是我们最关注的问题。在当前Module的build->outputs->apk文件夹下。
大家也可以看一下,以前我关于对gradle的配置,在此附上地址:Android studio gradle配置和android studio gradle 配置修改
另外:在开发Android应用时,通常情况下是通过USB数据线连接设备和计算机,但对于一些需要使用USB设备的应用,这种方法就碰到了麻烦,手机的USB接口已经和外接的USB设备连接,无法再连数据线,此时可以通过网络TCPIP的方法来进行。也就是然ADB 通过网络来连接设备,而无需USB数据线。
具体方法如下:
1. 使用USB数据线连接设备。
2. 在命令行输入adb tcpip 5555 ( 5555为端口号,可以自由指定)。
3. 断开 USB数据,此时可以连接你需要连接的|USB设备。
4. 再计算机命令行输入 adb connect <设备的IP地址>:5555
后面就可以使用ADB ,DDMS 来调试Android应用或显示Logcat 消息。
常见的App--------build.gradle配置
资料源自互联网