4 回答
TA貢獻(xiàn)1966條經(jīng)驗(yàn) 獲得超4個(gè)贊
gradle provided和compile的區(qū)別在于使用providedCompile的前提是apply plugin: 'war'
1、Gradle compile:
假如你的jar包存在代碼依賴性,在編譯、運(yùn)行時(shí)候需要依賴代碼,那就用compile
例如 :
compile 'org.springframework.boot:spring'
2、Gradle providedCompile:
假如你的jar包存在代碼依賴性,但是在編譯的時(shí)候才用得上,而運(yùn)行時(shí)不需要,就用providedCompile
例如:
providedCompile 'org.springframework.boot:spring'
TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超6個(gè)贊
Gradle compile:
如果你的jar包/依賴代碼 在編譯的時(shí)候需要依賴,在運(yùn)行的時(shí)候也需要,那么就用compile
例如 :
compile ‘org.springframework.boot:spring-boot-starter-websocket:1.1.6.RELEASE‘
Gradle providedCompile:
如果你的jar包/依賴代碼 僅在編譯的時(shí)候需要,但是在運(yùn)行時(shí)不需要依賴,就用providedCompile
例如:
providedCompile ‘org.springframework.boot:spring-boot-starter-tomcat:1.1.6.RELEASE‘
TA貢獻(xiàn)1725條經(jīng)驗(yàn) 獲得超8個(gè)贊
假設(shè)項(xiàng)目引用了類庫(kù) A 和類庫(kù) B ,同時(shí),這兩個(gè)類庫(kù)都依賴包 C 。
1. 如果 A 、B 、C 均為 Maven 依賴,可以直接使用,不會(huì)存在沖突問(wèn)題。
如果還是有問(wèn)題,則在主項(xiàng)目可以去除 A 、B 中的 C 。
主項(xiàng)目:
compile 'a.group:a.artifactId:a.version' {
exclude group: 'c.groupId', module: 'c.artifactId'
}
compile 'b.group:b.artifactId:b.version' {
exclude group: 'c.groupId', module: 'c.artifactId'
}
compile 'c.groupId:c.artifactId:c.version'
2. 如果 A 、B 均為 Maven 依賴,C 為 jar 依賴。則將 C 復(fù)制到主項(xiàng)目、A 、B 中,主項(xiàng)目 compile C ,A 、B provided C 。
主項(xiàng)目: compile files('libs/C.jar')
A 、B 項(xiàng)目:provided files('libs/xx.jar')
3. 如果 A 、B 均為 Library Project 依賴,C 為 jar 依賴。同 2 。
4. 如果 A 、B 均為 Library Project 依賴,C 為 Maven 依賴。同 2 或者 1(Maven 依賴也可以進(jìn)行 provided 處理)。
5. 如果 A 為 Maven 依賴或者 Library Project 依賴,B 為 jar 依賴,C 為 jar 依賴。
A 項(xiàng)目:provided files('libs/xx.jar')
B 項(xiàng)目和主項(xiàng)目,不做其他任何處理。
6. 如果 A 、B 、C 均為 jar 依賴,嘗試重新將 A 、B 打包,將 C 剝離出來(lái)。
TA貢獻(xiàn)2012條經(jīng)驗(yàn) 獲得超12個(gè)贊
在使用Android Studio開(kāi)發(fā)的時(shí)候,如遇到多個(gè)項(xiàng)目引用同一個(gè)library(源碼)的情況時(shí),會(huì)遇到在每個(gè)項(xiàng)目中都要有一套library的代碼的情況,對(duì)于還在開(kāi)發(fā)和維護(hù)中的Library需要頻繁的修改,這對(duì)同步就很麻煩,為了解決這個(gè)問(wèn)題,出現(xiàn)了下面的解決方案。
首先:新建一個(gè)類庫(kù)工程,工程名為AppLibs.Dev。
在該類庫(kù)中包含一個(gè)公共的類庫(kù)appLibs的Module,Module下面的build.gradle配置如下:
<pre code_snippet_id="2261040" snippet_file_name="blog_20170313_1_8450148" name="code" class="java">/** 聲明是Android類庫(kù) */ apply plugin: 'com.android.library' android { /** 為了能夠支持該庫(kù)中的包 */ useLibrary 'org.apache.http.legacy' /** 編譯SDK的版本 */ compileSdkVersion 25 /** build tools的版本 */ buildToolsVersion "25.0.2" defaultConfig { minSdkVersion 9 targetSdkVersion 25 versionCode 100 versionName "1.0.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { debug { // debug模式 } release { // 是否進(jìn)行混淆 minifyEnabled false // 混淆文件的位置 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } /** 移除lint檢查的error */ lintOptions { abortOnError false } } dependencies { /** compile fileTree將libs文件夾中所有的jar文件全部編譯。該方式和compile files方式選一種即可。 */ // compile fileTree(include: ['*.jar'], dir: 'libs') /** compile files將libs文件夾中單一的jar文件編譯 */ compile files('libs/jsch-0.1.53.jar') compile files('libs/commons-net-3.3.jar') compile files('libs/okhttp-3.2.0.jar') compile files('libs/okio-1.6.0.jar') /** 測(cè)試編譯 */ androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) /** 編譯指定包名下面模塊 */ compile 'com.android.support:appcompat-v7:25.2.0' compile 'com.android.support.constraint:constraint-layout:1.0.0-alpha7' /** 單元測(cè)試編譯 */ testCompile 'junit:junit:4.12' }</pre>
這樣一個(gè)類庫(kù)工程就建好了,接下來(lái)就是引用包含該類庫(kù)的工程。
其次:引用該類庫(kù)工程。通過(guò)Android Studio新建一個(gè)TestProject的工程,如下圖。
在該工程中需要做以下三件事:
1、在project的settings.gradle里面增加紅框圈住部分的代碼。
2、在module的build.gradle文件中增加紅框圈住部分的代碼:
如果該類庫(kù)工程中包含多個(gè)module,那么在settings.gradle文件中原有代碼后面增加下面的代碼即可:
include ':AppLibs.Dev:moduleName'
同時(shí)在APP module中build.gradle增加相應(yīng)的模塊代碼即可:
compile project(':AppLibs.Dev:moduleName')
3、點(diǎn)擊Android Studio的菜單中的Build->Clean Project,完成Clean以后就看到如下圖。
完成如上圖所示以后,表示類庫(kù)工程已經(jīng)被APP工程引用進(jìn)去了,這樣以后再修改類庫(kù)工程中的源碼,其他引用該類庫(kù)的工程中源碼也就同步修改了。
- 4 回答
- 0 關(guān)注
- 2403 瀏覽
添加回答
舉報(bào)




