「AndroidStudio」生成jar包,包含第三方庫

一、最簡單的打包方式

在講生成包含第三方庫之前,先講個(gè)最簡單的生成jar包方式:

task copyJar(type: Copy) {
    delete 'build/libs/code.jar' //刪除之前的舊jar包
    archivesBaseName = "code"http://jar包名稱
    from('build/classes/java/main') //這里是代碼編譯后的jar包目錄
    into('build/libs') //jar包輸出目錄
    include('classes.jar')//復(fù)制的代碼jar包,固定叫classes.jar
    rename('classes.jar', 'aaa.jar') //重命名jar包的名字(隨便寫都可以)
}
copyJar.dependsOn(build)

上面這種方式可以將代碼打進(jìn)jar包,但jar包里不包含資源文件和第三方庫的jar包源碼。

注意: from('build/classes/java/main')是能找到你代碼的編譯后的源碼路徑,我的Studio版本原由,必須寫這個(gè)目錄,一般網(wǎng)上大家的路徑是from('build/intermediates/bundles/release),不管是哪個(gè)路徑,只要能找到你的代碼就行。

將上面的代碼放入build.gradle文件里,同步(Sync)一下代碼,在AndroidStudio的右側(cè)有個(gè)Gradle


點(diǎn)開之后找到你項(xiàng)目的Tasks,再找到對(duì)應(yīng)到剛剛的方法,雙擊運(yùn)行。

運(yùn)行成功后會(huì)在你指定的目錄下生成對(duì)應(yīng)的jar包。這里指定的是build/libs

二、包含第三方庫的打包方式

這個(gè)我用上面那種方法試過很多次,最終發(fā)現(xiàn)無論如何都打不進(jìn)第三方庫的代碼。最終我找到了另一種方式:

task makeJar(type: Jar) {
    delete 'build/mylib.jar'//刪除舊的jar
    destinationDir = file('build/libs')//指定新jar包存放目錄
    archivesBaseName = "mylib"http://指定新jar包名字
    from file('build/classes/java/main')//你寫的代碼的來源,編譯后能找到你代碼的路徑。因人而異,有可能是 from('build/intermediates/bundles/release/classes.jar')
    //第三方庫的jar包存放位置
    from(project.zipTree("libs/fastjson-1.2.55.jar"))
    from(project.zipTree("libs/okhttp-3.10.0.jar"))
    from(project.zipTree("libs/okio-2.2.1.jar"))
    from(project.zipTree("libs/kotlin-stdlib-1.3.11.jar"))
}
makeJar.dependsOn(build)

打包過程同上。

以這種形式打出的jar包就包含第三方庫的代碼。

如何判斷是否包含第三方庫的代碼?

把生成的jar包重命名為.zip格式,解壓之后可以看到代碼目錄,如果含有第三方庫代碼,就說名打包成功了。

遇到的問題

1、運(yùn)行jar包時(shí)報(bào)jar中沒有主清單屬性

解決辦法:在gradle文件里添加寫入清單文件的指定主函數(shù)入口。

jar {
    manifest {
        attributes 'Main-Class': 'com.autotestdemo.maomao.reptilelib.MyClass'
    }
}

但是,這個(gè)命令并不能如愿寫入清單文件。我的結(jié)論是:以(type: Copy)的形式打出的jar包,上面的命令可以生效。但以(type: Jar)的形式生成的jar包,上面的命令行無法寫入清單文件?;蛟S這是Studio的一個(gè)bug。

2、基于上面這個(gè)問題,即使你手動(dòng)改寫MANIFEST.MF文件內(nèi)容,用java -jar命令運(yùn)行的時(shí)候還會(huì)報(bào)另外一個(gè)錯(cuò):

maomaodeMacBook-Pro:PAMobileWallet maomao$ java -jar reptilelib/build/libs/mylib.jar
Error: Invalid or corrupt jarfile /Users/maomao/Documents/demo/AutoTestDemo/reptilelib/build/libs/mylib.jar

這個(gè)問題我還沒找到解決辦法,鉆了2天也沒找到原因,最后我決定放棄,改用Eclipse打一個(gè)可以運(yùn)行的jar包。

當(dāng)然,如果你的jar無需運(yùn)行,只是作為一個(gè)依賴,用上面這兩種方式是完全足夠的。

Eclipse打包請(qǐng)參見:《「Eclipse」生成能用命令行運(yùn)行的jar包》

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容