導航:首頁 > 文件處理 > aar解壓後重新打成Aar

aar解壓後重新打成Aar

發布時間:2023-05-28 02:08:06

A. 排除aar/jar中冗餘或者沖突包、類

引入aar的沖突無所不在,通過遠程依賴maven的包可以通過 exclude 關鍵字搭配 mole 和 group 去除某個組,沒辦法去除具體的類。

那麼如果是單獨的aar包,想要排除aar下classes.jar包里的某個單獨的包或者類怎麼辦?

需要接入的jar包已經帶了騰訊X5核心,當前依賴的已經包含X5核心,沖突又該如何解決呢?

當前的gradle腳本(項鍵慧目鏈接: https://github.com/luohongxfb/ExcludeAar )可以解決。

如excludelib/libs/exampleAAR.aar,左邊是未去除的包結構,右邊是去除 com. 之後的:

如excludelib/libs/exampleJAR.jar:

(1)將需要排除的aar或者jar包放在excludelib/libs下。

(2)更改excludelib/build.gradle

(3)設置排除規則 如果您需要排除aar,那麼請更改excludelib/excludeAar.gradle;如果您需要排除jar,那麼請更改excludelib/excludeJar.gradle

(4)運行排橡頌除任務

排除後生成的aar在excludelib/build/excludeaar下,排除後生成的jar位於excludelib/build/excludejar。

然後就可以愉快的使用啦~

aar排除步驟:

1、獲取到需要排除的原始AAR包

2、解壓AAR包(zipTree配合Task Copy)

3、解壓AAR包中的class.jar(zipTree配合Task Copy)

4、按照排除規則對解壓的class.jar重新打包(Task Jar)

5、重新打包成AAR包(Task Zip)

jar排除步驟

1、獲取到需要排除的原始jar包

2、解壓jar包(zipTree配合Task Copy)

3、按照排除規則對解壓的jar重新打包(Task Jar)

主要原理:zipTree配合Copy,實現解壓。

Copy Task官方講解: https://docs.gradle.org/current/dsl/org.gradle.api.tasks.Copy.html

ziptree源碼主要解析:創建一個新的file tree包含原來zip的內容,可以配合Copy實現梁亮鄭解壓。

這個步驟就是把之前解壓的classes.jar文件,按照排除規則用Task Jar重新打包成jar文件。

Task Jar官方講解: https://docs.gradle.org/current/dsl/org.gradle.jvm.tasks.Jar.html

對classes.jar處理完成的aar重打包,主要用到Task Zip。

Task Zip官方講解: https://docs.gradle.org/current/dsl/org.gradle.api.tasks.bundling.Zip.html

原文鏈接

感謝Siy: https://blog.csdn.net/_34012226/article/details/80104771

B. android studio 怎麼打aar包

1.aar包是android studio下打包android工程中src、res、lib後生成的aar文件,aar包導入其他android studio 工程後,其他工程可以方便引用源碼和資源文件

2.生成aar包步驟:

①.用android studio打開一個工程,然後新建一個Mole,新建Mole時候選擇Android Library,後面按新建普通工程操作

3.其他androidstudio工程引用aar包

①.將aar包復制到lib目錄下

②.配置build.gradle文件:

加入

repositories {
flatDir {
dirs 'libs'
}

compile(name:'camerascan-1.0', ext:'aar')

完整的配置文件:

詳細教程詳細教程

C. 打包成aar的工程有第三方jar包,生成aar後,裡面的jar無法引用,怎麼解決

首先說明我使用的android studio
版本是0.4.因為現在android studio的bug還不較多,所以你的版本能不能正常使用我就不敢說了。

如果你只是單純的想使用actionbarsherlock的話,引用是十分簡單的dependencies {
// compile fileTree(dir: 'libs', include: '*.aar')
compile 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar'
compile 'com.android.support:support-v4:18.0.+'
}


不過官方也出了一個兼容包,也非常的不錯。so 沒必要非得要使用actionbarsherlock。

然後重新編譯一下項目就行了。(ps
引用第三方jar包,請看我的第一行注釋,你只要新建一個libs的文件夾,然後把想要jar包復制到文件夾下,接著把注釋那句復制到build文件中,修改一下(*.aar
-> *.jar)就可以了)。

但是我們要是使用本地的自定義的aar文件,請看我的實現過程,如果你有更好的請轉告小弟共同進步
第一步 :生成aar文件

我的方法是通過maven-android-plugin來生成的,如果你使用過actionbarsherlock以前的版本的話,這個工具應該不陌生,如果你連maven
都不知道的話,建議好好學習一下maven,雖然現在gradle很火 ,但是我還是最喜歡maven。

關於具體生成步驟不久不詳細說了,文章最後貼出幾個網址供大家學習使用,放心我按順序給你們,只要一步一步的來絕對能成功

1 把你的maven版本提升到3.1.1
2 去github上clone下來
maven-android-sdk-deployer 這個項目
3 通過maven-android-plugin生成一個android項目



mvn archetype:generate \
-DarchetypeArtifactId=android-quickstart \
-DarchetypeGroupId=de.akquinet.android.archetypes \
-DarchetypeVersion=1.0.11 \
-DgroupId=your.company \
-DartifactId=my-android-application

D. 將aar打包進so

前段時間有個項目,需要用c++開發我們自己的sdk,另外,我們的sdk又依賴於另一個aar包,當時想當然的以為生成so的時候會一起把aar打包進去,結果發現調用so的時候,aar裡面的類根本找不到,說明aar 並沒有一培鋒困起打包進so

後來想了下,既然將aar打包進so沒法實現,不如把我自己的so庫,還有第三方的aar再重新打一次,最終打成aar包,這樣就方便多了。步驟如下:

先在原來測試我們自己so庫的測試工程上新建一個moudle:配念

下面將上圖中的classes.jar還有lib下面的jar包拷貝到新建的mole下的libs目錄,並將剩餘的jni,AndroidManifest.xml等文件分別拷貝合並到對應的目錄內

5.下面就是要把我們aar拆出來的零件以及我們自己的so庫基橘重新打包成aar:

工程右側,找到Gradle,點開後找到我們上面新建的mole,點擊Tasks->build->assemble
等構建完成後,aar就生成了,生成目錄在我們的moudle目錄下面的:
build->outputs->aar下面

okay

E. 升級androidx 報錯bug

1、在項目的 gradle.properties 文件中配置如下

2、引入

https://blog.csdn.net/qq_24382363/article/details/87285438

這時候會提示上述錯誤,宏罩含因為sdk採用了更加嚴格的aapt編譯,正確的用法如下

如果字元串含有%,而不需要格式化可以有三種蔽笑方法解決

這個錯誤是引悶族用的兩個包中的屬性名稱沖突導致
忽略已存在的框架

jar 包

aar

那 直接 去aar 中刪除itemIconTint

解壓aar文件到tmpDir目錄下

修改後 將tmpDir重新打包成一個新的aar

https://www.jianshu.com/p/f0a267551493

F. Android:多aar打包

我使用的是網上這個 https://github.com/kezong/fat-aar-android
這個github庫。

具體配置是再跟gradle中添加:
classpath 'com.kezong:fat-aar:1.2.7'

在需要打包的地方添加:
apply plugin: 'com.kezong.fat-aar'

然後添加需要合並的包,可以是遠程包,本地aar,本地project。可以說很完整了。
例如:

怎麼看遠程依賴呢?下面這里就可以看

最後生成的aar包如下,jni和jar包都有了

反編譯看看classes.jar看看,本地項目的類都在這裡面了。

後面得看看是怎麼打包起來的了,不然後續作者不維護了就蛋疼了。

G. 終極方案:快速解決Android項目依賴沖突

沖突類型無非是類、jar包重復,比如:

在此不多做介紹了,直接上解決方案

1、配置顯示沖突依賴詳細信息

2、編譯,查看控制台詳細輸出

1、project依賴排除示例

2、遠程依賴排除示例

參考鏈接:如何exclude aar包中的某個jar包

核心:

① 解壓aar文件到tmpDir目錄下

② 找到classes.jar包,用壓縮工具打開,刪除目標文件

③ 將tmpDir重新打包成一個新的aar

H. AndroidStudio 打包 Android項目 成 aar

· 打包 Android項目成 aar,有兩種方式:

接下來分別列舉說明

1.1 點擊 File —> New —> New Mole... ,選擇 「Android Library」 , 最後點擊 「Finish」 創建 mole Library。

1.2 編寫需要打包成 aar 的庫亂碧文件,例如:我測試寫團態的 TestUtils 類

1.4 點擊 assemble 之後編譯完成,bulid->outputs->aar文件夾下會生成「正式」和「測試」aar包。

2.1 修改需要打包的mole項目下的 build.gradle 文件,然後點擊 「Sync Now」同步下

2.2 修改需要打包的mole項目下的 AndroidManifest.xml 清單文件

2.4 點擊 assemble 之後編譯完成,bulid->outputs->aar文件夾下會生成「正式」和「測試」aar包塌陪源

I. 如何將android studio 打包aar

將 Mole 配置為 library 後,構建輸出一個 aar 文件,根據渠道和 BuildType 的不同,在相應的目錄下可以找到。比如對 BuildType 為 debug 的配置,輸出為:[MoleName]/build/outputs/aar/[MoleName]-debug.aar。一份 aar 文件其實就是一份 zip 包,和 jar 不同橡祥的是,它將一些資源文件、第三方庫文件、so 文件等等都打包在內,而代碼文件編譯後壓縮在在 classes.jar 中。比如:

3、導入 aar 的方式引用
這種方式比較簡單,打開 Project Structure,添加一個新 Mole,然後選擇 Import *.JAR or *.AAR Package 的方式導入:

導入後,在你的工程下面,會生成一個文件夾,裡面是 aar 文件以及 Android Studio 的配置文梁物搏件。

接著可以螞衫在 gradle 中配置依賴了,其他 Mole 可以引用這個 Mole 了,依賴方式使用compile project 的方式即可。
缺點:被依賴的 aar 無法 F3 跟進去,無法看到資源文件內容以及目錄層級等等缺陷。
4、使用配置依賴的方式引用
gradle 其實還有另一種依賴可以引用 aar:
compile(name: 'xxx', ext: 'aar')。
首先需要將 aar 文件放入引用 Mole 的 libs 目錄下,和一般的 jar 文件類似。然後在 gradle 配置文件中把 libs 目錄加入依賴:
repositories {
flatDir {
dirs 'libs'
}
}

接著在 gradle 的依賴配置中加入 compile(name: 'xxx', ext: 'aar') 這一句,依賴即可關聯完畢。構建一下工程,在 Mole 的 build/intermediates/exploded-aar 目錄下,可以看到有一些臨時文件生成:

看起來完全是引用 aar 的解壓版本。Android Studio 安裝反編譯插件後,可以通過 F3 跟進到 class 文件裡面,如果你有被依賴 Mole 的源代碼的話,還可以 Attach Source 關聯源代碼查看。另外,可以很方便的查看 aar 中的資源文件。
另外,這種依賴方式更新 aar 後,生成的臨時文件也會隨之變動,不用擔心改動不同步的問題。
5、總結
綜上,介紹了 aar 文件的生成方式,以及兩種 aar 依賴的方式,經過實戰檢驗,第二種通過配置 gradle 依賴的方式簡單易用,只需一行代碼即可搞定。

閱讀全文

與aar解壓後重新打成Aar相關的資料

熱點內容
錢的所有演算法 瀏覽:13
光模塊伺服器怎麼直接連電腦 瀏覽:376
編譯器識別單詞 瀏覽:344
2b2t伺服器怎麼獲得金蘋果 瀏覽:344
SQL如何進行伺服器配置 瀏覽:175
貿易公司適合在什麼app引流 瀏覽:717
高級c語言編程還在用turboc 瀏覽:884
cad如何畫單片機 瀏覽:13
管理雲伺服器哪個軟體好 瀏覽:747
什麼app可以消除照片一片水印 瀏覽:242
在什麼app上發表條漫 瀏覽:88
安卓電腦主機怎麼打開 瀏覽:819
eos生態app什麼時候可以登陸 瀏覽:397
找安裝維修工人用什麼App 瀏覽:300
區位碼加密 瀏覽:854
考編教師用什麼app 瀏覽:195
靜態面向對象編程語言 瀏覽:908
炒股密碼pdf 瀏覽:666
差分演算法有哪些 瀏覽:567
佳明怎麼配對安卓 瀏覽:247