1. 程式人生 > >Android studio 將 Module 打包成 Jar 包

Android studio 將 Module 打包成 Jar 包

  整理記錄 AndroidStudio 把一個 module 專案打包成 jar 包。

一、預設自動生成的 jar 包

  眾所周知 android studio 會在library所依賴的 app執行 或 build 之後自動生成 jar 包,路徑為 Module根目錄/build/intermediates/bundles/debug or release/classes.jar,這樣生成的jar是可以用的,但不是我們可以控制的,所以我們需要通過其他方式來解決這個問題。

  注意:

  若發現 Android Studio 專案 bundle 資料夾下沒有 release 目錄,可能是沒有將 module 新增到主 module 依賴中。

  方式1:主module右鍵 --> 倒數第二個Open Module Setting--> 上面最後一個選項Dependencies-->右邊綠色加號-->Module dependency......然後確定

  方式2:主Module的gradle的dependencies(平時新增第三方庫的地方)中加上 compile project(':lib-zxing')

二、自定義生成 jar 包

  首先,需要將待打包 module 專案中的 build.gradld 檔案進行修改,如下圖: 
  

  其次,在 build.gradle 檔案中加入如下程式碼: 

  方式一:

def _BASENAME = "TestJar";
def _VERSION = "_V1.0";
def _DestinationPath = "build"; //生成jar包的位置
def zipFile = file('build/intermediates/bundles/default/classes.jar'); //待打包檔案位置

task deleteBuild(type:Delete){
    delete _DestinationPath + _BASENAME + _VERSION + ".jar"
}

task makeJar(type:Jar){
    from zipTree(zipFile)
    from fileTree(dir:'src/main',includes:['assets/**']) //將assets目錄打入jar包  
    baseName = _BASENAME + _VERSION
    destinationDir = file(_DestinationPath)
}

makeJar.dependsOn(deleteBuild, build)

  方式二:打包的 jar 只有原始碼的.class 檔案,不包含資原始檔

task makeJar(type: Copy) {
    delete 'build/TestJar_V1.0.jar' //刪除之前的舊jar包
    from('build/intermediates/bundles/default/') //從這個目錄下取出預設jar包
    into('build/') //將jar包輸出到指定目錄下
    include('classes.jar')
    rename('classes.jar', 'TestJar_V1.0.jar') //自定義jar包的名字
}
makeJar.dependsOn(build)

  方式三:

task clearJar(type: Delete) {
    delete 'build/TestJar_V1.0.jar' //jar包的名字,隨便命名 
}
task makeJar(type:org.gradle.api.tasks.bundling.Jar) {
    //指定生成的jar名 
    baseName 'TestJar_V1.0'
    //從哪裡打包class檔案 
    from('build/intermediates/bundles/default/')
    //打包到jar後的目錄結構 
    into('build/')
    //去掉不需要打包的目錄和檔案 
    exclude('test/', 'BuildConfig.class', 'R.class')
    //去掉R開頭的檔案  
    exclude{it.name.startsWith('R');}
}
makeJar.dependsOn(clearJar, build)

  注意:

  以上配置資訊要與 android {…….} 配置的指令碼成平級關係。

  其中 _BASENAME = "TestJar"; _VERSION = "_V1.0"; 是定義生成 jar 包的名字為TestJar_V1.0.jar。

  配置好以後就可以編譯jar包了,有兩種方式:

  方式 A :點選 Android Studio 右側(一般在這個位置)的 Gradle 面板,在專案或者該類庫的目錄中找到 Tasks -> other -> makeJar 命令,雙擊這個makeJar之後等一會就會編譯好jar包。

  

  打包成功後:在配置的指定目錄下生成jar包

    

  方式 B :通過 cmd 命令列,在專案根目錄下,執行 gradlew makeJar 命令,看到編譯完成的資訊以後就OK了,也能生成一樣的jar包,和直接使用①中的方式是等價的。

  注意:使用此方式前要配置好 gradle 的“ 環境變數 ”,否則直接在專案根目錄下找不到這個命令。使用 cmd 比較費勁,不推薦。

  方式 C :在 Android Studio 終端視窗中輸入 gradlew makeJar 命令。

  

  打包成功如下圖:

  

  打包成功後:在配置的指定目錄下生成jar包

  

  注意:

  問題1:

      

  對於以上配置 form 預設 jar 包部分,在用目錄是 from('build/intermediates/bundles/release/') ,注意粗體部分,最初我也是按照這個目錄寫的,確實沒問題。但後來,也就是Android Studio 更新到2.3以後,發現這個目錄沒有了,取而代之的是 default 和 debug 目錄,debug目錄之前也是有的,沒有變化,只是原來的release目錄被現在的default目錄代替了。這導致我後來生成jar包的時候始終沒有找到jar包,報上圖所示錯誤。

  原因就是沒有了 release 目錄,找不到預設的 classes.jar 檔案,所以也就沒有生成自定義名字的jar包,改為 default 或者 debug 目錄以後就能正常生成jar包了,要注意這點變化。

  問題2

Execution failed for task ':mylibrary:lint'.
> Lint found errors in the project; aborting build.

  解決在 build.gradle 檔案中,加入下面的程式碼塊(注意程式碼塊所在的位置),重新執行 gradlew makeJar 命令。

android {
    lintOptions {
        abortOnError false
    }
    ...
}

  最後注意:

  將被嵌入的應用打包成 jar 包,但是這樣的方式有侷限性,無法將被嵌入的應用所使用的資源性檔案一起打包。下面介紹 aar 打包方式。

三、直接使用 aar 包

  將被嵌入的應用打包成 aar 包,這也是 Android Studio 的一種新特性,可以將應用所使用的資源性檔案一起打包。編譯即可打包生成 aar 包,而且也不用擔心漏掉資源問題。

  如果Project 中 Module 是一個應用,則在 Module 的 build.gradle 檔案中定義屬性為:apply plugin: 'com.android.application';而如果 Mudule 是一個被引用的依賴 lib 庫的話,則在 Module 的 build.gradle 檔案中定義屬性為: apply plugin: 'com.android.library;所以當我們將應用 Module 打包出 aar 檔案的時候,需要修改型別屬性。正常情況下,直接重新編譯 Module,生成的 aar 包在 Module 根目錄的/build/outputs/aar/,如下圖:

  

  下面介紹將 aar 包新增到其他 Android 工程:

  首先,將 aar 包複製到 libs 目錄下

  其次,配置build.gradle檔案:

  A 在 android 中加入,如下:

repositories {  
    flatDir {  
        dirs 'libs'  
    }  
}  

  B 在 dependencies 中加入 compile(name:lib-zxing-release', ext:'aar')

  完整 build.gradle 檔案如下:

apply plugin: 'com.android.application'  
  
android {  
    ...
    repositories {  
        flatDir {  
            dirs 'libs'  
        }  
    }  
}  
  
dependencies {  
    ...
    compile(name:'lib-zxing-release', ext:'aar')  
}  

  最後,重新編譯 Rebuild 的以下工程。

相關推薦

Android studio Module 打包 Jar

  整理記錄 AndroidStudio 把一個 module 專案打包成 jar 包。 一、預設自動生成的 jar 包   眾所周知 android studio 會在library所依賴的 app執行 或 build 之後自動生成 jar 包,路徑為 Module

Android Studio modulejar

代碼 ren mod color undle rto 重新 測試 module 1.新建測試工程,工程裏面有兩個module,app是Android工程,mylibrary是Android Library庫。 2.打開mylibrary目錄下的build.gradle文件

Android Studio 專案打JAR

新建一個專案 為demo 切換到project下,點選demo新建一個與app統計module新建的module選擇Android Library,專案名為mylibrary(也可以隨便選擇,但是在你要打包的時候將mylibrary中的gradle裡面apply plugin

android專案打包jar使用

將Android打包成jar包供人使用,可利用java的反射技術,獲取相應的id.方便使用者替換自己所需要的。 1.新建Android專案:ActivityLibrary,這就是需要我們打包成jar包的專案: 2.MResource這個類的作用,就是利用J2SE反射技術獲

Android Studio3.3.2 模組打包jar

前提: Android studio3.3.2的時候bundles目錄不存在了,改為packaged-classes。 tas

AndroidStudio專案打包jar的簡單方法

以下內容是根據網上的方法進行驗證後的總結。 在AndroidStudio中將專案打包成jar包的方法:  在build.gradle檔案中,修改下面兩個地方: (1)apply plugin:'com.android.application' 改為 apply plug

Android專案module打包aar檔案

fat-aar.gradle檔案下載地址: https://github.com/adwiv/android-fat-aar 2.修改build.gradle 在build.gradle中新增:apply from: 'fat-aar.gradle', 注意:這句話要寫在dependencies之上。 之

SpringBoot 如何專案打包jar

最近瀏覽器一上傳圖片,檔案,就無響應,也沒找到解決辦法,可能電腦改換了o(╥﹏╥)o 1.首先在pom.xml檔案中匯入Springboot的maven依賴 <!--將應用打包成一個可以執行的jar包--> <build>

Android studio--專案生成為jar

第一步:切換成Android 找到Gradle 下的app。第二步: 遮蔽application,建立libaray,然後進行編譯。第三步:點選右上角 找到app第四步:找到 libjarsForRel

Android Android專案打包aar檔案並在其他專案中引用,打包jar

首先說一下jar包和aar包有什麼區別? 1.打包之後生成的檔案地址: *.jar:庫/build/intermediates/bundles/debug(release)/classes.jar *.aar:庫/build/outputs/aar/l

Android Activity及其他類打包jar供第三方呼叫

 在開發java工程時,一個專案可能分為多個模組,為了實現模組間的解耦和獨立,提高模組的複用性,通常將專案按模組分為多個java工程進行開發,最後通過jar包等工程依賴的方式實現系統整合,提高模組的耦合和複用。   現在開發Android專案通過實踐和總結,發現這種

Android Studio Project 中Module打包aar

在公司開發中遇到這樣需求,將一個獨立的應用嵌入其他應用當中; 相關方法有兩種: 第一種是將被嵌入的應用打包成 jar 包,但是這樣的侷限性是無法將被嵌入的應用所使用的資源性檔案一起打包; 第二種是將被嵌入的應用打包成 aar 包,這也是 Android Studio 的一種

Android Studio libs下的JAR打合並打一個總jar

task buildJar(type: Jar, dependsOn: ['compileReleaseJavaWithJavac']) { // task buildJar(type: Jar, dependsOn: ['build']) //匯出的jar檔案的名

AndroidActivity打jar供第三方呼叫(解決資原始檔不能打包的問題)

最近有一個需要,我們公司做了一個apk客戶端,然後其他的公司可以根據自己的需要來替換裡面的資源圖片,文字等一些資原始檔問題,我本來想這個簡單,用兩個工程直接替換裡面的資原始檔就行,老大說,這樣子不好,如果要改需要改兩個客戶端,而且還麻煩,叫我將所有的Activity

LInux 網站基於地域維度的UV分析 以及eclipse打包jar

PV: Page View 網頁瀏覽量 UV:Unique View 使用者唯一訪問量 Ip:網路IP地址訪問網站的訪問量 VV:Visit View 遊客的訪問數量 回顧:Hadoop 是一個由Apache基金會所開發的分散式系統基礎架構,其功能是為了解決大資料的儲存和大資料的計算。

Eclipse中Java專案打包jar並生成可獨立執行的exe檔案

目錄 1、準備工作 (1)JAR file和Runnable JAR file,它們的不同點在哪? The runnable jar contains a MANIFEST.MF file, which defines the Main class

如何使用EclipseJava工程打包Jar,並用bat檔案啟動Jar

作者:翁鬆秀 如何使用Eclipse將Java工程打包成Jar包,並用bat檔案啟動Jar包 如何使用Eclipse將Java工程打包成Jar包,並用bat檔案啟動Jar包 一、用Eclipse將Java工程打包成J

java工程打包jar

1. 準備MANIFEST.MF檔案 1)若生成的jar包直接匯入java工程中使用,可以不用MANIFEST.MF檔案,直接在工程中匯入jar包引用到的第三方包; 2)若生成的jar包需要放到伺服器上跑,在jar包的存放路徑下同時存放一個lib資料夾,在該

java專案打包jar並生成可獨立執行的exe檔案

專案要求,需要將java專案生成exe檔案,網上有許多文章,可有些直接複製,現將自己的整理出來: 一:思路: 1、將java專案打包成jar包 2、將jar包生成exe檔案 二:準備工作: jar檔案生成exe檔案用到第三方軟體:exe4j 本機上已安裝好jdk環境。

Dubbo之——Dubbo服務打包Jar

伺服器:192.168.1.121(mydubbo-server) 一、Dubbo服務的執行方式 1、使用Servlet容器執行(Tomcat、Jetty等)—-不可取 缺點:增加複雜性(埠、管理) tomcat/jetty等佔用埠,dubbo服務也需