『壹』 android Studio編譯慢、卡死和狂佔內存怎麼破
在2020年,仍然使用2g內存的電腦,你可以改變職業。沒有合適的設備,什麼都沒用。Android Studio是內存,設備爛卡死不可避免,要解決卡的問題,一定要升級硬體設備。另一些人則說,對修辭學的回答相當有力,在一定程度上,加快編譯的速度,卻不能解決卡死的問題,沒有人能解釋為什麼會加快編譯的速度。
至於加快編譯,有一種方法,我認為一些主要適用性的答案並不強,實際上應該從gradle開始,什麼不是正確的地方,也請輕噴,有什麼問題可以留個信息。
我談到了下面的所有步驟,建議在最後進行。在終端編譯中有很多好處:
能觀察整個編譯過程,幫助理解層次構建過程;
可以看出哪些任務在編譯過程中耗費時間,可以較慢地編寫出適合的補救方案;
可以終止編譯,如果在某個階段被卡住,CTRL + c終止編譯,Android也會終止在Studio中編譯,但基本上九次會失敗;
因為它最終會對Android Studio產生影響,基本不會導致Android Studio caton;不滿足Android工作室的各種bug ?
最後,為什麼要減少設置中模塊的數量。Gradle實際上可以加速編譯,但是有很多限制?
首先,我們認為編譯過程,首先解析gradle配置,設置任務依賴於有向圖,然後執行每個任務的模塊,如果我們通過maven的依賴關系,使用模塊的aar(單android庫),如果我們想要改變文件在這個模塊,不要再次修改上傳下載,每次都是很好,但是有一個致命的問題:不修改版本號,快照通常不是做的想法。這可能導致一些不會生效的變化,並且需要時間來解決這個問題。但是,有一種方法可以在一定程度上解決這個問題,並添加以下腳本:
項目。配置。所有(新操作<配置> ({@ Overridevoidexecute(配置文件){文件)。ResolutionStrategy。TimeUnit CacheDynamicVersionsFor(5。分鍾)
文件。ResolutionStrategy。TimeUnit CacheChangingMolesFor(0。秒)} })
有人會問,插件,每個人都要開發一個模塊,對於每個模塊的維護都要打包到maven,每次我修改,甚至很小的改動,也要做一個上傳,就會遇到快照不做同樣的問題。嘿,嘿,這個問題,我們公司有一個等級插件,已經解決了,至於解決方案,是公司機密,我不會說。
一件事,我相信大多數開發人員共同發展是單一模塊,該模塊的情況並不多,所以最基本的也是依賴aar或罐子里,並不存在所謂的圖書館aar上傳,所以一些答案的耶和華說並不意味著什麼,這就是為什麼我說影響編譯速度的情況主要集中在它的生命周期的第三階段,第三階段的優化,看到我的答案。
『貳』 eclipse怎麼配置gradle
一、Gradle簡介
Gradle 是以 Groovy 語言為基礎,面向java應用為主。基於DSL(領域特定語言)語法的自動化構建工具。
二、配置步驟如下:
1、資源下載:
Grandle官網下載Gradle
『叄』 gradle配置不成功,求助貼
近項目遇蠻煩問題Maven約定標准Java項目代碼結構:
project
--src
--main
--java
--resources
--test
--java
--resources
『gradle idea』構建intelliJ項目文件自幫忙設置所Source RootTest Source Root我工作部門我希望測試unitintg2類別更加容易區測試目同提供Build Pipeline別運行同類別測試能力我部門內標准Java項目結構:
project
--src
--main
--java
--resources
--test
--common
--java
--unit
--java
--resources
--intg
--java
--resources
目錄結構我剩2問題要解決:
1. 何區運行IntegrationTestUnit Test
2. 何保證『gradle idea』需重新設置Test Source Rootgradle具備識別新代碼結構能力
何寫Gradle Plugin
語言:
JavaGroovyScala都推薦用Groovy,畢竟Gradle本質說用Groovy寫DSL使用Groovy更致點
注入式:
Gradle支持3種形式定製Plugin注入:
1. 直接Plugin源代碼直接寫Build Script面
2. Pluigin源代碼寫rootProjectDir/buildSrc/src/main/groovy目錄
3. 用單獨project寫Plugin源代碼jar依賴形式注入項目
覺都想要自寫Plugin定項目公用Plugin否則直接Plugin代碼直接寫腳本要定製Plugin我看定需要單獨jar形式注入
寫project-structure Plugin:
Gradle寫Plugin非簡單首先添加項目依賴我使用Groovy寫插件所添加localGroovy依賴
Gradle代碼
apply plugin: 'groovy'
dependencies {
compile gradleApi()
compile localGroovy()
}
寫Plugin實現代碼實現代碼需要實現Plugin介面即我實現代碼做兩件事定製項目代碼結構二添加integrationTest Task該Task運行*IntegrationTest.class, Build Pipeline階段運行Unit TestIntegrationTest
Groovy代碼
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.tasks.testing.Test
class ProjectStructurePlugin implements Plugin {
@Override
void apply(Project project) {
project.logger.info "Configuring Project Structure for $project.name"
project.configurations {
integrationTestCompile { extendsFrom testCompile }
integrationTestRuntime { extendsFrom integrationTestCompile, testRuntime }
}
configureSourceSets(project)
addIntegrationTestTask(project)
}
private void addIntegrationTestTask(Project project) {
Test intgTest = project.getTasks().create("integrationTest", Test.class);
intgTest.testClassesDir = project.sourceSets.integrationTest.output.classesDir
intgTest.includes = ["**/*IntegrationTest.class"]
intgTest.inputs.dir 'src'
intgTest.outputs.dir project.sourceSets.integrationTest.output.classesDir
project.check.dependsOn project.integrationTest
intgTest.dependsOn project.test
}
private void configureSourceSets(Project project) {
project.sourceSets {
test {
java {
srcDir 'src/test/unit/java'
srcDir 'src/test/common/java'
}
resources {
srcDir 'src/test/unit/resources'
}
}
integrationTest {
java {
srcDir 'src/test/intg/java'
srcDir 'src/test/common/java'
}
resources {
srcDir 'src/test/intg/resources'
}
compileClasspath = project.sourceSets.main.output + project.sourceSets.test.output + project.configurations.integrationTestCompile
runtimeClasspath = output + compileClasspath + project.configurations.integrationTestRuntime
}
}
}
}
接著項目src/main/resources/META-INF/gradle-plugins目錄創建文件:.properties,該文件指定Plugin實現類:
Java代碼
implementation-class=com.xianlinbox.plugins.ProjectStructurePlugin
項目使用該Plugin
首先需要build.gradle腳本引入該Pluginjar包依賴文件形式更推薦jar包發布Maven庫Maven依賴形式注入本例使用本文件依賴:
Groovy代碼
buildscript {
dependencies {
classpath fileTree(dir: 'libs', include: '*.jar')
}
}
注入編寫插件注意該插件必須java plugin起使用其使用SourceSets屬性該插件引入進:
Groovy代碼
apply plugin: 'java'
apply plugin: 'project-structure'
插件通『gradle test』『gradle integrationtTest』區別運行UnitTestIntrgrationTest
解決自設置Test Source Root問題需要build.gradleideaMole Task增加識別Test Source Root能力即:
Groovy代碼
apply plugin: 'idea'
...
idea {
mole {
testSourceDirs += file('src/test/intg/java')
testSourceDirs += file('src/test/intg/resources')
}
}
我寫Plugin設置Project-Structrue:
Groovy代碼
......
compileClasspath = project.sourceSets.main.output + project.sourceSets.test.output + project.configurations.integrationTestCompile
runtimeClasspath = output + compileClasspath + project.configurations.integrationTestRuntime
project.idea {
mole {
testSourceDirs = testSourceDirs + new File('src/test/intg/java') + new File('src/test/intg/resources')
}
}
1、安裝
Gradle安裝Maven便需要載( )==》解壓==》配置環境變數(GRADLE_HOME & PATH)配置環境變數記使用 source命令使新環境變數效配置功命令行通 gradle -v"驗證否安裝功
2、Gradle編譯Maven風格java項目
首先項目根目錄創建"build.gradle"文件編譯java項目需要使用gradlejava插件
Groovy代碼
apply plugin: 'java'
,要集maven功能需要添加maven插件
Groovy代碼
apply plugin: 'maven'[
接著配置項目Repository風格
Groovy代碼
repositories{
mavenCentral();
}
面例使用默認maven央庫想用自本庫通式配置
Groovy代碼
def localMavenRepo = 'file://' + new File(System.getProperty('user.home'), '.m2/repository').absolutePath
repositories {
// Use local Maven repo location. We don't need this if we only want to install
// an artifact, but we do need it if we want to use dependencies from the local
// repository.
mavenRepo urls: localMavenRepo
mavenCentral()
}
再配置項目依賴第三庫配置模板:
Groovy代碼
dependencies{
compile group: '',name:'',version:''
}
舉例假設項目依賴4.10版本junit配置
Groovy代碼
compile group: 'junit',name:'junit',version:'4.10'
另外Depencies按式簡寫
Groovy代碼
compile '::'
例
Groovy代碼
compile 'junit:junit:4.10'
何自項目發布Repository
Groovy代碼
uploadArchives {
repositories {
mavenDeployer {
repository(url: "file://localhost/tmp/myRepo/")
}
}
『肆』 如何實現 Gradle 工程上的增量編譯
到此 NDK的配置完成,開始進行 fresco的編譯 1.首先從github上下載項目 2.將項目導入到Android Studio中: 選擇 Open an exsiting Android Studio Project 選擇文件夾下的 build.gradle文件
『伍』 minecraft我的世界gradle構建,總是失敗,求告訴詳細教程。不要發網址,要會的人。不會的
最近在項目中遇到一個不大,但是還蠻煩人的問題,在Maven的約定中,一個標准Java項目的代碼結構如下:
project
--src
--main
--java
--resources
--test
--java
--resources
當『gradle idea』構建intelliJ項目文件時,會自動幫忙設置好所有的Source Root,Test Source Root。但是,在我工作的部門中,我們希望可以把測試分為unit,intg2個類別,這樣可以更加容易區分測試的目的,同時提供了Build Pipeline分別運行不同類別測試的能力。因此,我們部門內的標准Java項目結構如下:
project
--src
--main
--java
--resources
--test
--common
--java
--unit
--java
--resources
--intg
--java
--resources
有了這個目錄結構之後我們剩下2個問題要解決:
1. 如何區分運行IntegrationTest和Unit Test
2. 如何保證『gradle idea』以後,無需重新設置Test Source Root。因為gradle不具備識別新的代碼結構的能力。
如何寫一個Gradle Plugin
語言:
Java,Groovy,Scala都可,推薦用Groovy,畢竟Gradle本質上來說就是一個用Groovy寫的DSL,使用Groovy可以更一致一點。
注入方式:
Gradle支持3種形式的定製Plugin注入:
1. 直接把Plugin源代碼直接寫在Build Script裡面。
2. 把Pluigin源代碼寫到rootProjectDir/buildSrc/src/main/groovy目錄下
3. 用一個單獨的project來寫Plugin源代碼,然後以jar依賴的形式注入項目。
個人覺得,都想到要自己寫一個Plugin了,那麼一定是有多個項目公用這個Plugin了,否則的話,直接把Plugin的代碼直接寫到腳本里就好了。因此,要定製Plugin,在我看來,一定是需要以一個單獨的jar形式注入的。
寫project-structure Plugin:
在Gradle中,寫一個Plugin非常簡單,首先,添加項目依賴,我使用Groovy來寫插件,所以添加了localGroovy依賴。
Gradle代碼
apply plugin: 'groovy'
dependencies {
compile gradleApi()
compile localGroovy()
}
然後寫Plugin的實現代碼,實現代碼只需要實現Plugin<Project>介面即可,在我的實現代碼中,做了兩件事,一是定製了項目的代碼結構,二是添加了integrationTest Task,該Task只運行*IntegrationTest.class, 這樣可以在Build Pipeline分階段運行Unit Test和IntegrationTest。
Groovy代碼
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.tasks.testing.Test
class ProjectStructurePlugin implements Plugin<Project> {
@Override
void apply(Project project) {
project.logger.info "Configuring Project Structure for $project.name"
project.configurations {
integrationTestCompile { extendsFrom testCompile }
integrationTestRuntime { extendsFrom integrationTestCompile, testRuntime }
}
configureSourceSets(project)
addIntegrationTestTask(project)
}
private void addIntegrationTestTask(Project project) {
Test intgTest = project.getTasks().create("integrationTest", Test.class);
intgTest.testClassesDir = project.sourceSets.integrationTest.output.classesDir
intgTest.includes = ["**/*IntegrationTest.class"]
intgTest.inputs.dir 'src'
intgTest.outputs.dir project.sourceSets.integrationTest.output.classesDir
project.check.dependsOn project.integrationTest
intgTest.dependsOn project.test
}
private void configureSourceSets(Project project) {
project.sourceSets {
test {
java {
srcDir 'src/test/unit/java'
srcDir 'src/test/common/java'
}
resources {
srcDir 'src/test/unit/resources'
}
}
integrationTest {
java {
srcDir 'src/test/intg/java'
srcDir 'src/test/common/java'
}
resources {
srcDir 'src/test/intg/resources'
}
compileClasspath = project.sourceSets.main.output + project.sourceSets.test.output + project.configurations.integrationTestCompile
runtimeClasspath = output + compileClasspath + project.configurations.integrationTestRuntime
}
}
}
}
接著,在項目的src/main/resources/META-INF/gradle-plugins目錄下,創建一個文件:<plugin-name>.properties,在該文件中指定Plugin的實現類:
Java代碼
implementation-class=com.xianlinbox.plugins.ProjectStructurePlugin
在項目中使用該Plugin
首先,需要在build.gradle腳本中引入該Plugin的jar包依賴,可以是以文件的形式,當然個人更推薦的是把jar包發布到Maven庫中,以Maven依賴的形式的注入,本例中使用的是本地文件依賴:
Groovy代碼
buildscript {
dependencies {
classpath fileTree(dir: 'libs', include: '*.jar')
}
}
然後,注入編寫的插件,注意,該插件必須和java plugin一起使用,因為其中使用到SourceSets屬性是從該插件中引入進來的:
Groovy代碼
apply plugin: 'java'
apply plugin: 'project-structure'
有了這個插件之後,就可以通過『gradle test』和『gradle integrationtTest』區別運行UnitTest和IntrgrationTest了。
最後,解決自動設置Test Source Root的問題,只需要在build.gradle為ideaMole Task增加識別Test Source Root的能力即可:
Groovy代碼
apply plugin: 'idea'
...
idea {
mole {
testSourceDirs += file('src/test/intg/java')
testSourceDirs += file('src/test/intg/resources')
}
}
當然,我們也可以把它寫到Plugin中去,在設置為Project-Structrue之後:
Groovy代碼
......
compileClasspath = project.sourceSets.main.output + project.sourceSets.test.output + project.configurations.integrationTestCompile
runtimeClasspath = output + compileClasspath + project.configurations.integrationTestRuntime
project.idea {
mole {
testSourceDirs = testSourceDirs + new File('src/test/intg/java') + new File('src/test/intg/resources')
}
}
1、安裝
Gradle安裝和Maven一樣方便,只需要,下載(http://www.gradle.org/downloads )==》解壓==》配置環境變數(GRADLE_HOME & PATH),配置好環境變數之後記得使用 source命令使新的環境變數生效。配置成功之後,可以在命令行通過 「gradle -v"驗證是否安裝成功。
2、Gradle編譯Maven風格的java項目
首先,在項目根目錄創建"build.gradle"文件,編譯java項目需要使用gradle的java插件
Groovy代碼
apply plugin: 'java'
,因為要集成maven的功能,需要添加maven插件
Groovy代碼
apply plugin: 'maven'[
。
接著,配置項目的Repository,風格如下
Groovy代碼
repositories{
mavenCentral();
}
,上面例子使用的是默認的maven的中央庫,如果想用自己的本地庫,可通過如下方式配置
Groovy代碼
def localMavenRepo = 'file://' + new File(System.getProperty('user.home'), '.m2/repository').absolutePath
repositories {
// Use local Maven repo location. We don't need this if we only want to install
// an artifact, but we do need it if we want to use dependencies from the local
// repository.
mavenRepo urls: localMavenRepo
mavenCentral()
}
再然後,配置項目依賴的第三方庫,配置模板如下:
Groovy代碼
dependencies{
compile group: '<group-id>',name:'<artifact-id>',version:'<version>'
}
,舉個例子,假設項目依賴了4.10版本的junit,那麼配置就是
Groovy代碼
compile group: 'junit',name:'junit',version:'4.10'
另外Depencies還可以按如下方式簡寫
Groovy代碼
compile '<group-id>:<artifact-id>:<version>'
例子
Groovy代碼
compile 'junit:junit:4.10'
最後,如何把自己的項目發布到Repository中,
Groovy代碼
uploadArchives {
repositories {
mavenDeployer {
repository(url: "file://localhost/tmp/myRepo/")
}
}
『陸』 gradle裡面怎麼配置java版本
配置Gradle運行環境的方法 到Gradle官網,下載Gradle安裝包。 選擇「Complete distribution (binaries, sources and offline documentation)」 解壓縮到本地目錄 配置GRADLE_HOME的環境變數 將%GRADLE_HOME%/bin配置到PATH中
『柒』 Android 開發,Android Studio編譯慢,卡死和狂佔內存怎麼破
已經使用Android Studio進行開發超過一年,隨著項目的增大,依賴庫的增多,構建速度越來越慢,現在最慢要6分鍾才能build一個release的安裝包,在網上查找資料,發現可以通過一些配置可以加快速度,這里跟大家分享一下。
開啟gradle單獨的守護進程
在下面的目錄下面創建gradle.properties文件:
/home/<username>/.gradle/ (Linux)
/Users/<username>/.gradle/ (Mac)
C:\Users\<username>\.gradle (Windows)
並在文件中增加:
org.gradle.daemon=true
同時修改項目下的gradle.properties文件也可以優化:
# Project-wide Gradle settings.
# IDE (e.g. Android Studio) users:
# Settings specified in this file will override any Gradle settings
# configured through the IDE.
# For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html
# The Gradle daemon aims to improve the startup and execution time of Gradle.
# When set to true the Gradle daemon is to run the build.
# TODO: disable daemon on CI, since builds should be clean and reliable on servers
org.gradle.daemon=true
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
# Default value: -Xmx10248m -XX:MaxPermSize=256m
org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
org.gradle.parallel=true
# Enables new incubating mode that makes Gradle selective when configuring projects.
# Only relevant projects are configured which results in faster builds for large multi-projects.
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:configuration_on_demand
org.gradle.configureondemand=true
同時上面的這些參數也可以配置到前面的用戶目錄下的gradle.properties文件里,那樣就不是針對一個項目生效,而是針對所有項目生效。
上面的配置文件主要就是做, 增大gradle運行的java虛擬機的大小,讓gradle在編譯的時候使用獨立進程,讓gradle可以平行的運行。
修改android studio配置
在android studio的配置中,開啟offline模式,以及修改配置。實際上的配置和上面的一大段一樣,主要是在這個地方配置的只會在ide構建的時候生效,命令行構建不會生效。
命令行構建
基於上面的配置,命令行構建時在命令後面加上這個參數即可 --daemon --parallel --offline。
引入依賴庫時使用aar
使用網上第三方的依賴庫時盡量使用aar,可以在mavenhttp://gradleplease.appspot.com/或者githuhttps://github.com/Goddchen/mvn-repo搜索。
自己的庫模塊也可以打包成aar,關於這個可以參考stormzhang的文章http://www.stormzhang.com/android/2015/03/01/android-reference-local-aar/。
『捌』 求教吧內大神一個內網伺服器使用gradle編譯的問題
1,打開「控制面板」,然後單擊啟動「添加/刪除程序」,在彈出的對話框中選擇「添加/刪除Windows組件」,在Windows組件向導對話框中選中「Internet信息服務(IIS)」,然後單擊「下一步」,按向導指示,完成對IIS的安裝。
2,單擊開始菜單---所有程序---管理工具---Internet信息服務(IIS)管理器,打開站點屬性設置對話框。
3,點擊主目錄,將目錄設置為自己的網頁存放的目錄。
4,點擊開始,打開控制面板,防火牆,然後在左側的關閉Windows防護牆。
5,區域網上的電腦輸入http://你電腦的IP地址 ,就能打開網頁了。
『玖』 android studio Gradle守護進程的一個坑爹問題
首先 我們倆看一下 gradle的介紹
Gradle提供幾個選項,使它容易配置的Java進程將被用於執行構建。同時可以配置這些在你當地的環境通過GRADLE_OPTS或JAVA_OPTS,某些設置比如JVM內存設置,Java,守護進程開/關可以更有用,如果他們可以與風投的項目版本,這樣整個團隊就可以使用一致的環境。建立一個一致的環境構建簡單把這些設置成gradle.properties文件。
要想讓項目編譯的更加快速 最主要的問題就是 配置 gradle.properties
如果你之前沒有什麼配置,那麼將會是下面的界面 (注釋除外)
詳細