前言
最近接触到了一个新的项目,里面应该有好多自己未曾学习过的地方,特此记录。
笔记
1.编译项目报错
Error:Execution failed for task ':app:dexInternalDebug'.
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'D:\SorftWare\JDK\bin\java.exe'' finished with non-zero exit value 3
因为项目中使用了DEX分包方案。
解决办法是在gradle文件的android节点中加入下面的配置,意思是增加java堆内存的大小。
dexOptions {
javaMaxHeapSize "4g"
}
2.provideComplie和compile的区别
如果你的jar包/依赖代码 在编译的时候需要依赖,在运行的时候也需要,那么就用compile
如果你的jar包/依赖代码 仅在编译的时候需要,但是在运行时不需要依赖,就用providedCompile
3.关于studio项目结构中文件的作用
gradle.properties: 配置文件,可以定义常量供build.gradle文件使用
settings.gradle:配置多模块
gradle-wrapper.jar和gradle-wrapper.properties,只要是gradle项目都会有,通过gradle init命令来创建。
gradlew和gradlew.bat:分别是linux下的shell脚本和windows下的批处理文件,
4.gradle命令所在位置
想要在命令行直接能够输入gradle命令,我们需要配置环境变量,这时候我们就要知道gradle命令所在路径
//Studio安装路径下的gradle文件夹中
D:\SorftWare\AndroidStudio\gradle\gradle-2.4\bin
5.gradle命令
gradlew build编译项目
gradlew clean清理项目
gradlew -v查看gradle版本
gradlew assembleDebug编译Debug包
gradlew assembleRelease编译Release包
6.gradle配置
gradle有三种仓库,maven仓库,ivy仓库以及flat本地仓库。声明方式如下:
maven{
url "..."
}
ivy{
url "..."
}
flatDir{
dirs 'xxx'
}
一般引用aar的时候使用flatDir
首先将aar文件放到模块的libs目录下,然后在该模块的build.gradle中声明flat仓库:
repositories{
flatDir{
dirs 'libs'
}
}
//使用外部脚本构建
apply from: 'xxx.gradle'
//指定单元测试的配置
sourceSets {
androidTest {
java.srcDirs = ['tests/src']
manifest.srcFile 'tests/AndroidManifest.xml'
}
}
7.解决第三方库最低支持的版本高于应用最低支持的版本
在AndroidManifest.xml文件中 标签中添加
<uses-sdk tools:overrideLibrary="xxx.xxx.xxx"/>
,其中的xxx.xxx.xxx为第三方库包名,如果存在多个库有此异常,则用逗号分割它们,例如:,这样做是为了项目中的AndroidManifest.xml和第三方库的AndroidManifest.xml合并时可以忽略最低版本限制。
8.其他配置
minifyEnabled//主要用来控制是否运行混淆的
zipAlignEnabled//zipAlign优化,可以提高应用运行效率
versionNameSuffix//后缀名
ndk {
//设置支持的SO库架构
abiFilters 'armeabi' //, 'x86', 'armeabi-v7a', 'x86_64', 'arm64-v8a'
}
// 移除无用的resource文件
shrinkResources true
//执行lint检查,有任何的错误或者警告提示,都会终止构建,我们可以将其关掉。
lintOptions {
abortOnError false
}
9.代码中设置权重
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
lp.weight = 1;
itemView.setLayoutParams(lp);