1. 程式人生 > 其它 >android studio生成和使用jar包

android studio生成和使用jar包

技術標籤:androidjava

1. 生成jar

因為專案需求,需要把android程式碼生成jar包,供別人使用

在我除錯階段,我的android程式碼是app形態的,要想生成jar包,首先就要修改app下build.gradle的第一行(其實就和c++工程中cmake配置add_execute改成add_library類似,我們是為了生成庫,不是二進位制程式):

apply plugin: ‘com.android.application’ 改成 apply plugin: ‘com.android.library’

同時,這行程式碼需要註釋掉:
在這裡插入圖片描述
或者,重新在當前工程中建立一個module,選擇生成lib方式,然後把app module中的java原始檔、依賴的jar檔案、native c++檔案、native so庫都拷貝到lib module中,配置該lib module 的gradle,生成jar,也是可以的。(本質就行把當前app module映象了一份,這不過這次是生成lib)

剩下的工作就是在build.gradle中增加生成jar的task,例如:

task makeJar(type: Copy) {
        //刪除之前的lib包
        delete 'build/libs/newlib.jar'
        //jar檔案來源
        from('build/intermediates/packaged-classes/release/') 
        //生成路徑
        into('build/libs/') 
        include('classes.jar')
         //命名為network.jar
        rename
('classes.jar', 'newlib.jar') } makeJar.dependsOn(build)

原理很簡單,android studio 3.4.x預設會在build/intermediates/packaged-classes/release下面生成classes.jar檔案,這個task的作用就是把該jar檔案移動下位置,改個名字。

然後雙擊AS右側gradle工具下的makeJar(或通過gradlew命令等方式)就可以在指定目錄下生成該jar檔案了。

2. 使用jar

  1. 把生成的jar匯入到其他工程中
  2. 如果原來的jar工程包含了native程式,並且依賴了其他native c++ so庫,那麼很簡單,把jni生成的so和三方c++ so也放到其他工程對應的lib目錄下,就可以正常使用。在呼叫jar中的native方法時,會自動去找三方c++ so。例如,我是把jar對應的so庫放到了這裡:
    在這裡插入圖片描述

3. 問題記錄

build jar過程中提示找不到x86_64庫。。

解決方法:

設定abifilters。因為我本身只需要build arm64-v8a平臺,所以在abifilters中設定了該平臺的filter,這樣後續在其他build過程中只會針對該平臺進行build,不會存在找不到x86-64庫之類的問題了(畢竟此時系統只考慮arm64-v8a平臺了)

4. 參考