使用gradle打包jar包
來自: http://blog.csdn.net/maosidiaoxian/article/details/24456267
最近用android studio來做android開發的IDE,它是使用gradle來構建的,于是開始學習gradle.
現在有一個項目,里面有一個android-library的模塊。我想在做release的時候,把這個模塊中我寫的代碼編譯并打包成jar包,并且和依賴的jar包拷貝出來,但android studio對android-library的管理是把其與依賴包打包成一個aar的包的,顯示這不是我要的,于是便想用gradle來實現。
首先我找到的第一種方法是在模塊中的build.gradle增加一個編譯jar包的task.代碼如下:
task releaseJar(type:Jar) { from sourceSet.main.java destinationDir = file('build/libs') }
但是執行的時候,卻提示里面的Log類找不到。顯示用這種方法只能編譯一般的java文件,無法編譯用到了android庫的源文件。可能是還要在哪里添加依賴吧。
第二種方法是在stackoverflow中找到的,它也確實能打包成jar包。代碼如下:
android.libraryVariants.all { variant -> def name = variant.buildType.name if (name.equals(com.android.builder.BuilderConstants.DEBUG)) { return; // skip debug builds } def task = project.tasks.create "jar${name.capitalize()}, Jar task.from variant.javaCompile.destinationDir artifacts.add('archives', task) }
然后執行gradle jarRelease就可以了。
但是它會把我的R.java也編譯進去,而且這個文件又很大。我原來的代碼編譯之后打包才不到13K,加上編譯這個文件的話,要28K。
第三種方法就比較取巧了。這是因為gradle在構建的時候,會對這個模塊的class文件先打包成classes.jar并放在build/bundles/release。于是我只需要把它拷出來,并重命名就可以了。
于是代碼如下:
task releaseJar(type: Copy) { from( 'build/bundles/release') into( 'build/libs') include('classes.jar') rename('classes.jar', 'superlog' + VERSION_NAME + '.jar') } task releaseLib(type: Copy, dependsOn: releaseJar) { into "../../release" from 'libs' from 'build/libs' }
其中VERSION_NAME是我定義的一個變量,在gradle.properties文件中。該文件與gradle.build在同級目錄。
本文由用戶 EddieXsw 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!