Android Gradle 配置小窥
来源:互联网 发布:单片机培训机构 编辑:程序博客网 时间:2024/05/17 04:51
- 文档 Android Plugin DSL Referencel
- 一 从buildgradle文件中分离签名信息
- 在项目根目录下创建文件 keystoreproperties
- 在 buildgradle 文件中如下配置
- 附命令行签名
- 使用命令行生成私钥
- 编译获取一个 unsigned APK
- 使用 jarsigner 签名 app
- 验证签名
- 优化
- 二 buildgradle 标签 android
- defaultConfig productFlavors
- aaptOptions
- adbOptions
- buildTypes
- compileOptions
- dataBinding
- dexOptions
- jacoco
- lintOptions
- packagingOptions
- signingConfigs
- sourceSets
- splits
- testOptions
文档 Android Plugin DSL Referencel
一 从build.gradle
文件中分离签名信息
如果你是开源项目,建议这么做。否则最好不要暴露签名信息。以下仅供参考。
1. 在项目根目录下创建文件 keystore.properties
:
storePassword="myStorePassword"keyPassword="mykeyPassword"keyAlias="myKeyAlias"storeFile="myStoreFileLocation"
2. 在 build.gradle 文件中如下配置
...// 创建一个 keystorePropertiesFile 变量,在 rootProject 文件夹下初始化// keystore.properties 文件.def keystorePropertiesFile = rootProject.file("keystore.properties")// 初始化一个新的 Properties() 对象.def keystoreProperties = new Properties()// 在 keystoreProperties 对象中加载 keystore.properties 文件keystoreProperties.load(new FileInputStream(keystorePropertiesFile))android { signingConfigs { config { keyAlias keystoreProperties['keyAlias'] keyPassword keystoreProperties['keyPassword'] storeFile file(keystoreProperties['storeFile']) storePassword keystoreProperties['storePassword'] } }}
这样就把签名信息分离出来了,方便了替换。
附:命令行签名
1. 使用命令行生成私钥
$ keytool -genkey -v -keystore my-release-key.keystore-alias alias_name -keyalg RSA -keysize 2048 -validity 10000
这个命令会提示你输入 keystore 和 key 的密码, 以及一些列信息。-validity
指的是有效期天数。最后会生成 my-release-key.keystore 文件。
2. 编译获取一个 unsigned APK
3. 使用 jarsigner 签名 app
$ jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1-keystore my-release-key.keystore my_application.apk alias_name
这个命令会提示你输入 keystore 和 key 的密码.
4. 验证签名
$ jarsigner -verify -verbose -certs my_application.apk
也可以通过解压 apk,获取 META-INF 文件夹下的 CERT.RSA 信息进行验证:
keytool -printcert -file CERT.RSA
5. 优化
$ zipalign -v 4 your_project_name-unaligned.apk your_project_name.apk
二 build.gradle 标签 android{}
android 标签下的配置与生成的 BaseExtension.class 里的方法相对应,。
public abstract class BaseExtension implements AndroidConfig{}
AndroidConfig 接口里声明 android 标签的配置,源码如下,所有的属性配置及含义点击查看:BaseExtension .
1. defaultConfig { } && productFlavors { }
配置 App 的产品特性, defaultConfig 是默认的产品特性,自定义的 productFlavors 里的所有特性都各自继承 defaultConfig 的特性。
更有趣的是~~
(1).可以给生成的 BuildConfig 类添加新字段:buildConfigField(type, name, value)
。
(2).添加一个新资源(resValue(类型, 名字, value)
):resValue("string", "apiurl", "http://blog.csdn.net/yang786654260")
,build之后就可以通过 R.string.apiurl 获取,其他类型也一样。
(3).给清单文件中添加可变变量(manifestPlaceholders ),例如:
manifestPlaceholders = [googlekey: "xxxxxxxxxxxx", facebook_app_id: "1111111111", app_name: "APPPP"]
把配置的 key-value 存在了 map 对象(mManifestPlaceholders)中,build之后在清单文件中动态获取值如下:
android:label="${app_name}" <meta-data android:name="com.google.android.geo.API_KEY" android:value="${googlekey}" /> <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="${facebook_app_id}" />
建议 把 Key 放到 build.gradle里。
(4).multiDexEnabled, https://developer.android.com/studio/build/multidex.html
,超过 64K 方法的解决办法如下:
build.gradle:
android { defaultConfig { // Enabling multidex support. multiDexEnabled true }}dependencies { compile 'com.android.support:multidex:1.0.0'}
Application:
public void onCreate(Bundle arguments) { MultiDex.install(getTargetContext()); super.onCreate(arguments); ...}
(5)设置 productFlavors 后,运行 app,就可以在Build Variant 选择相应的版本进行编译。
2. aaptOptions { }
Android Asset Packaging Tool, 是用来打包 APK 是工具。aaptOptions { } 是对打包工具的配置。
3. adbOptions { }
timeOutInMs 用于配置 adb 命令的超时。
installOptions 用于对安装命令的配置,例如:installOptions “-d", "-t"
。
4. buildTypes { }
配置编译类型,可以给 applicationId 加后缀(applicationIdSuffix),配置app名字,配置签名,添加版本号后缀(versionNameSuffix),zipalign ,去除无用资源(shrinkResources),配置混淆文件等。
更有趣的是~~(同 上 )
1.可以给生成的 BuildConfig 类添加新字段:buildConfigField(type, name, value)
。
2.添加一个新资源(resValue(类型, 名字, value)
):resValue("string", "apiurl", "http://blog.csdn.net/yang786654260")
,build之后就可以通过 R.string.apiurl 获取,其他类型也一样。
3.给清单文件中添加可变变量(manifestPlaceholders ),例如:
manifestPlaceholders = [googlekey: "xxxxxxxxxxxx", facebook_app_id: "1111111111", app_name: "APPPP"]
把配置的 key-value 存在了 map 对象(mManifestPlaceholders)中,build之后在清单文件中动态获取值如下:
android:label="${app_name}" <meta-data android:name="com.google.android.geo.API_KEY" android:value="${googlekey}" /> <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="${facebook_app_id}" />
建议 把 Key 放到 build.gradle里。
5. compileOptions { }
用于指定 Java 源码和编译的 版本,以及源码的编码格式。
6. dataBinding { }
databinding 的配置。databinding 详解。
7. dexOptions { }
在这里可以配置:
- javaMaxHeapSize(例:”2048m”);
- jumboMode(是否开启jumbo 模式);
- dexInProcess(是否运行 dx 编译器时作为一个独立的进程或内部JVM Gradle守护进程。这样可以极大的提高性能,但是还在实验阶段);
- maxProcessCount(dex最大并发进程,默认是4,并发进程的内存需求:
Total Memory = getMaxProcessCount() * getJavaMaxHeapSize()
, 故这两个的配置要适当以避免 trashing); - preDexLibraries(这可以提高增量构建,但clean构建可能会慢一些。)
- threadCount(dx 运行时使用的线程数,默认是4)
8. jacoco { }
Java Code Coverage, http://www.eclemma.org/jacoco/。
9. lintOptions { }
强大的 lint 的配置。
10. packagingOptions { }
有个错误:Error: duplicate files during packaging of APK,就是在这里解决的:
packagingOptions { exclude 'META-INF/ASL2.0' exclude 'META-INF/LICENSE' exclude 'META-INF/license.txt' exclude 'META-INF/NOTICE' exclude 'META-INF/notice.txt' }
11. signingConfigs { }
签名文件的配置。
12. sourceSets { }
配置各种资源源码路径。例如(下面示例解决了 .so 文件不在 jniLibs 文件夹下就无法识别的Error):
sourceSets { main { jniLibs.srcDirs = ['libs'] } }
13. splits { }
http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits
14. testOptions { }
注:以上部分配置可以使用 Android Studio 的图形界面,但又局限性。
- Android Gradle 配置小窥
- android gradle 配置 build.gradle
- gradle 配置有关小Tips
- Android studio gradle配置
- Android studio gradle配置
- Android studio gradle配置
- Android studio gradle配置
- android gradle配置
- android gradle 配置
- Android studio gradle配置
- Android gradle配置
- Android studio gradle 配置
- Android studio gradle配置
- Android studio gradle配置
- Gradle之android配置
- Android studio gradle配置
- android studio gradle 配置
- Android Studio Gradle配置
- [USACO Training] Section 2.3
- 第9课 Go接口interface
- Java笔记之数组
- GCD
- javascript 简单介绍
- Android Gradle 配置小窥
- 找出字符串中第一个只出现一次的字符
- nginx之第一个helloworld程序
- 找女朋友
- 使用ffmpeg 对视频做resize
- ActiveMq的简单使用
- C++强制转换运算符
- 机房收费系统——组合查询
- 我遇到tomcat 7 full gc频繁的问题