Android Studio 整理
1. 同步&build
(1). 使用AS下载gradle(文件gradle-wrapper.properties)比较慢,可以先把gradle***.zip下载到本地,然后再把zip文件放到指定文件夹中(Window: <个人文件夹>/.gradle/wrapper/dists/gradle***/afhkydqrb47n2/;Ubuntu: home/name/.gradle/wrapper/dists/gradle***/afhkydqrb47n2/),然后重启AS 或者 点击工具栏的 Sync Project Gradle Files即可
(2). gradle搞定后,会从jcenter和maven中同步相应的第三方库,设置网络代理然后同步,可以从Settings -> Http Proxy设置,也可以在gradle.propterties中添加代理地址。
Eg:
systemProp.https.proxyHost=*
systemProp.https.proxyPort=*
systemProp.http.proxyHost=*
systemProp.http.proxyPort=*
2. 优化Gradle构建速度
(1). 升级Gradle版本
File -> Project Structure -> Project中查看现在使用的Gradle版本。
从Gradle网站查看下载最新的Gradle版本(Gradle版本升级后,AS中的Android Gradle Plugin有时也需要升级)https://services.gradle.org/distributions/
把下载的Gradle解析并放到本地Gradle文件中:
设置使用本地的新下载的Gradle,在File -> Settings -> Build, Execution, Deployment -> Gradle -> Use local gradle distribution -> Gradle Home中指定下载的Gradle地址
(2). 打开Offline mode,Gradle daemon 和 parallel build(并行构建,对于有Project和Library时可以加快构建速度)
1>. 打开Offline mode让Gradle忽略最新版本检查。
在File -> Settings -> Build, Execution, Deployment -> Gradle ->勾选Offline work
2>. 在File -> Settings -> Build, Execution, Deployment -> Compiler 中勾选“Compile independent modules in parallel”和 在Command-line Options中填写 –offline
3>. 设置Gradle daemon, parallel build和gradle jvm。如果只设置这个Project的话,只需修改/gradle.properties即可;如果设置全局的话,需要修改<个人文件夹>/.gradle/gradle.properties。
参考:
org.gradle.jvmargs=-Xmx5120m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
#下面这个jvm的值还小
# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
org.gradle.daemon=true
org.gradle.parallel=true
org.gradle.configureondemand=true
android.enableBuildCache=true
(3). 打开 incremental dexign 和 tweak memory
在Module:app中的build.gradle中添加下面内容,
dexOptions {
incremental true
javaMaxHeapSize "12g"
}
参考地址:https://hackernoon.com/speed-up-gradle-build-in-android-studio-80a5f74ac9ed
3. 设置代理
http/https
systemProp.https.proxyHost=X.X.X.X
systemProp.https.proxyPort=XXXX
systemProp.http.proxyHost=X.X.X.X
systemProp.http.proxyPort=XXXX
socks5
org.gradle.jvmargs=-DsocksProxyHost=127.0.0.1 -DsocksProxyPort=7077
在$HOME/.gradle/gradle.properties 文件中加入上面那句,这样就可以全局开启 gradle 代理
4. 混淆打包问题
(1). 打包时提示“avoid non-default constructors in fragment”的错误
原因:
Android Developer中Fragment的介绍:
处理方式:
- 忽略这个问题
在build.gradle中添加下面内容:
android {
lintOptions {
disable 'ValidFragment'
checkReleaseBuilds false
}
}
或者在代码处添加 @SuppressLint(“ValidFragment”)
- 实现static newInstance()方法
这样写的解释
Eg:
public static final AlertFragment newInstance(int title, String message)
{
AlertFragment f = new AlertFragment();
Bundle bdl = new Bundle(2);
bdl.putInt(EXTRA_TITLE, title);
bdl.putString(EXTRA_MESSAGE, message);
f.setArguments(bdl);
return f;
}
...
@Override
public void onCreate(Bundle savedInstanceState)
{
title = getArguments().getInt(EXTRA_TITLE);
message = getArguments().getString(EXTRA_MESSAGE);
//...
//etc
//...
}
(2). 打包时提示’:transformClassesAndResourcesWithProguardForRelease’错误
参考:
proguard-rules.pro文件中删除包含 -injars, -outjars, 和 -libraryjars的行。有时需要保留libs/文件夹下面的jar包的类,参考示例:
-keep class org.ejml.** { *; }
-dontwarn org.ejml.**
-keep class org.ddogleg.** { *; }
-dontwarn org.ddogleg.**
参考链接:
https://stackoverflow.com/questions/35333453/migration-from-eclipse-to-android-studio-proguard-errors-with-libraryjars
https://stackoverflow.com/questions/34900266/how-to-get-proguards-libraryjars-with-filter-working-in-android-studio