關于安卓打包生成aar,jar實現(一)

關于安卓打包生成aar,jar方式

背景

在開發的過程中,主項目引入三方功能的方式有很多,主要是以下幾個方面:
(1)直接引入源代碼module(優點:方便修改源碼,易于維護,迭代。缺點:對于新手不友好,可能會遇到依賴兼容問題,需要排除并且適配)
(2)遠程依賴,目前主要是用maven依賴。(優點:幾行代碼即可依賴完成。缺點,庫存在問題的話,修改很麻煩)
(3)直接引入jar或者aar。(module編譯后的產物,優點:可增加混淆之類的規則,使代碼更安全,隱蔽。缺點:本地修改會有難度,編譯有一定的難度)

本文,就是講述,如何使用androidstudio打包生成aar,jar。

環境

win10
jdk 11
jdk 8
as 4.0+
gradle 7.0+

編碼

首要要搞懂,aar包和jar包有什么區別?很簡單來說,aar包是在jar包上,增加了資源,例如layout,res。
如果你開發的是一個純業務類型的庫,可以打jar包。如果涉及到界面等邏輯,就需要打aar包了。

(一)生成aar包
首先,要有個androidstudio中的module。然后clean project,build project即可生成。具體目錄,就是在module對于的build項目下查找,即可看到,結構如下圖:
在這里插入圖片描述
那么,又是如何生成release的aar包呢?
只需要點擊右側邊欄的gradle->對應模塊->other->assembleRelease,等待編譯完成即可,編譯后內容如下圖:
在這里插入圖片描述
上述就是一些關于model如何生成一個aar包的操作。

(二)生成jar包
對于生成一個jar包,比aar包要復雜一點。需要在模塊目錄的build.gradle文件,加入以下代碼:

task makeJar(type: Copy) {//刪除存在的delete 'build/libs/ztuiqueue.jar'//設置拷貝的文件from('build/intermediates/aar_main_jar/release/')//打進jar包后的文件目錄into('output/libs/')//將classes.jar放入build/libs/目錄下 //include ,exclude參數來設置過濾 //(我們只關心classes.jar這個文件)include('classes.jar')//重命名rename('classes.jar', 'ztuiqueue.jar')
}
makeJar.dependsOn(build)

其中,函數from中的路徑,是隨著gradle的版本不一樣二變化的。需要在build目錄下進行查找。
上述代碼的意思,僅僅是把jar包復制出來,其實原jar包的目錄是在比較深的層級的。

(三)代碼混淆
對于完成了(一)(二)兩步的朋友,現在已經接近尾聲了。最后就是一個代碼混淆的問題。如果不涉及混淆,請忽略該步驟。
對于module中的打包aar/jar代碼混淆,需要在build.gradle文件中,buildTypes路徑下,加入以下代碼即可:

    buildTypes {release {minifyEnabled true/*模塊混淆*/consumerProguardFiles 'proguard-rules-libxui-queue.pro'/*打包aar,jar混淆*/proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules-libxui-queue.pro'}debug {minifyEnabled false/*模塊混淆*/consumerProguardFiles 'proguard-rules-libxui-queue.pro'/*打包aar,jar混淆*/proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules-libxui-queue.pro'}}

其中,很清晰明了的一句,就是 /打包aar,jar混淆/

            proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules-libxui-queue.pro'

而“proguard-rules-libxui-queue.pro”請替換成你開發module的具體混淆文件名字即可。
上述代碼的意思就是,如果是正式包,則開啟混淆,測試包則不開啟。當然,主項目的混淆狀態也會直接影響子module的混淆狀態。

注意

混淆的過程中,需要遵循對應的混淆原則。否則會出現無法識別的情況。
還有,對外的輸出的jar包,aar包,也應該附帶對應的混淆規則說明。

that‘s all-------------------------------------------------------------------------------

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/37243.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/37243.shtml
英文地址,請注明出處:http://en.pswp.cn/news/37243.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Spring_AOP

一、AOP簡介 AOP,Aspect Oriented Programming,面向切面編程,是對面向對象編程0OP的升華。OOP是縱向對一個事物的抽象,一個對象包括靜態的屬性信息,包括動態的方法信息等。而AOP是橫向的對不同事物的抽象,屬性與屬性、方法與方法、對象與對象…

算法訓練營題目day17

110. 平衡二叉樹 給定一個二叉樹,判斷它是否是高度平衡的二叉樹。 本題中,一棵高度平衡二叉樹定義為: 一個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過 1 。 func isBalanced(root *TreeNode) bool {h:getHeight(root)if h -1{r…

Vue 安裝開發者工具

1.下載開發者工具,下載地址:http://book.wiyp.top/App/Vue3開發者工具-谷歌/Vue3.crx 2.打開谷歌瀏覽器,點擊擴展,點擊管理擴展程序。 3.開啟開發者模式,將 Vue3 開發者工具文件拖拽到瀏覽器中進行安裝。 注&#xff…

chatGPT小白快速入門培訓課程-001

一、前言 本文是《chatGPT小白快速入門培訓課程》的第001篇文章,全部內容采用chatGPT和chatGPT開源平替軟件生成。完整內容大綱詳見:《chatGPT小白快速入門課程大綱》。 本系列文章,參與: AIGC征文活動 #AIGC技術創作內容征文# …

使用pymupdf實現PDF內容搜索并顯示功能

簡介: 在日常工作和學習中,我們可能需要查找和提取PDF文件中的特定內容。本文將介紹如何使用Python編程語言和wxPython圖形用戶界面庫來實現一個簡單的PDF內容搜索工具。我們將使用PyMuPDF模塊來處理PDF文件,并結合wxPython構建一個用戶友好的…

動態HTTP代理與競爭情報收集的關聯

Hey,各位爬友們!作為一名專業的爬蟲HTTP代理提供者,今天我要和大家聊一聊動態HTTP代理與競爭情報收集之間的關聯。在這篇文章中,我將向大家解釋怎么使用動態HTTP代理完成在競爭中的情報收集,并分享一些實用的技巧。 首…

虹科方案 | 汽車總線協議轉換解決方案(二)

上期說到,虹科的PCAN-LIN網關在CAN、LIN總線轉換方面有顯著的作用,尤其是為BMS電池通信的測試提供了優秀的解決方案。假如您感興趣,可以點擊文末相關鏈接進行回顧! 而今天,虹科將繼續給大家帶來Router系列在各個領域的…

Netty:判斷ByteBuf底層是否被NIO direct buffer支撐

說明 io.netty.buffer.ByteBuf的函數isDirect()可以判斷該ByteBuf底層是否被NIO direct buffer支撐。如果結果返回true,表示底層被NIO direct buffer支撐。 示例 package com.thb;import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBufAllocator; imp…

elasticsearch 基礎

ES 搜索技術歷史 今天看的是《Elasticsearch實戰與原理解析》 第一章 搜索技術發展史 1、搜索技術發展史 宏觀而言,搜索引擎的發展經歷了五個尖端和兩大分類。五個階段分別是ftp文件檢索階段、分類目錄階段、文本相關性檢索階段、網頁鏈接分析階段和用戶意圖識別…

算法leetcode|69. x 的平方根(rust重拳出擊)

文章目錄 69. x 的平方根:樣例 1:樣例 2:提示: 分析:題解:rust:go:c:python:java: 69. x 的平方根: 給你一個非負整數 x &#xff0c…

win10電腦npm run dev報錯解決

npm run dev報錯解決 出現錯誤前的操作步驟錯誤日志解決步驟 出現錯誤前的操作步驟 初始化Vue項目 $ npm create vue3.6.1創建項目文件夾client Vue.js - The Progressive JavaScript Framework? Project name: ? client ? Add TypeScript? ? No ? Add JSX Support? …

【Pytorch:nn.Embedding】簡介以及使用方法:用于生成固定數量的具有指定維度的嵌入向量embedding vector

文章目錄 1、nn.Embedding2、使用場景 1、nn.Embedding 首先我們講解一下關于嵌入向量embedding vector的概念 1)在自然語言處理NLP領域,是將單詞、短語或其他文本單位映射到一個固定長度的實數向量空間中。嵌入向量具有較低的維度,通常在幾…

計算機網絡中速率和帶寬的區別

速率,指的是連接在計算機網絡上的主機在數字信道上傳送數據的速率,它也稱為數據率或比特率,單位是bps。速率往往指的是額定速率或者標稱速率,意思也就是在非常理想的情況下才能達到的數據傳送的速率,然而在現實生活中是…

[Mongodb 5.0]單機啟動

安裝完mongodb后,會自動生成下面兩個目錄(mongod.conf中設定的),用來存放日志和數據 /var/lib/mongo (數據目錄) /var/log/mongodb (日志目錄) 要啟動一個單機版的mongodb,一般有兩種方式: 第一種啟動方式:直接使用…

第5章:神經網絡

神經元模型 上述定義的簡單單元即為神經元模型。 多層網絡 誤差逆傳播算法 標準BP算法:參數更新非常頻繁,可能出現抵消現象。積累BP算法:下降到一定程度上,進行下一步會非常緩慢。 過擬合 早停:劃分訓練集和驗證集…

Java bean 是個什么概念?

Java bean可以把它比作一個"智能的容器",它具備封裝數據的能力。 Java bean是一種可重用的軟件組件,它主要用于在Java應用程序中存儲和傳遞數據。它是一種符合特定規范的Java類,通過封裝數據和提供訪問方法,使數據的管…

vue3+ts使用antv/x6

使用 2.x 版本 x6.antv 新官網: 安裝 npm install antv/x6 //"antv/x6": "^2.1.6",項目結構 1、初始化畫布 index.vue <template><div id"container"></div> </template><script setup langts> import { onM…

redis — 基于Spring Boot實現redis延遲隊列

1. 業務場景 延時隊列場景在我們日常業務開發中經常遇到&#xff0c;它是一種特殊類型的消息隊列&#xff0c;它允許把消息發送到隊列中&#xff0c;但不立即投遞給消費者&#xff0c;而是在一定時間后再將消息投遞給消費者。延遲隊列的常見使用場景有以下幾種&#xff1a; 在…

HoudiniVex筆記_P23_SDFBasics有向距離場

原視頻&#xff1a;https://www.youtube.com/playlist?listPLzRzqTjuGIDhiXsP0hN3qBxAZ6lkVfGDI Bili&#xff1a;Houdini最強VEX算法教程 - VEX for Algorithmic Design_嗶哩嗶哩_bilibili Houdini版本&#xff1a;19.5 1、什么是SDF Houdini支持兩種體積類型&#xff0c;…

使用wxPython和PyMuPDF提取PDF頁面指定頁數的內容的應用程序

在本篇博客中&#xff0c;我們將探討如何使用wxPython和PyMuPDF庫創建一個簡單的Bokeh應用程序&#xff0c;用于選擇PDF文件并提取指定頁面的內容&#xff0c;并將提取的內容顯示在文本框中。 C:\pythoncode\new\pdfgetcontent.py 準備工作 首先&#xff0c;確保你已經安裝了…