A. android studio aar怎麼用
一. 簡介
aar是一個類似於jar的文件格式。但是他們之間是有區別的。
jar:僅僅包含class和清單文件,沒有資源文件。
aar:包含了class文件和資源文件。說白了就是Android的專屬「jar」
將代碼打包成aar文件,可以在一定程度上加快AndroidStudio的速度。
尤其是將Mole打包成aar文件,提升的效果很顯著。
二. 如何得到aar
1. Mole的aar文件
將一個AndroidStudio項目中的Mole打包成aar其實很簡單。
在每一個Mole的目錄下面都會有這樣一個文件夾:build\outputs\aar。
這個文件夾下面就放著這個Mole對應的aar文件。
一般情況下會有兩個aar文件,一個debug版本,一個release版本。
我們選擇release的就ok。
注意:
新建的Mole是沒有這個文件夾的。這時,你可以使用 兩種方法 生成這個文件夾
將整個項目運行一遍,這個文件夾會自動生成
執行命令 ./gradlew assembleRelease 也可以生成這個文件夾
Mole中的libs目錄文件會隨著項目的編譯被打包進aar文件中,但是build.gradle中的引用庫不會打包進aar文件中,這個需要 特別留意。如果你忽略了這個Mole的build.gradle中的引用庫,很可能引發ClassNotFoundException異常。
2. 遠程倉庫的aar
在項目裡面經常會引用一下遠程倉庫的依賴庫。
這時,我們也可以將它以aar的形式引入到項目中。
這個依賴庫的aar其實也很好找。
當你配置好一個依賴庫以後,點擊 Sync Now 。
AndroidStudio會自動下載這個庫到C盤(windows)。你找到這個文件就可以了。
這里我使用的是Everything進行搜索,很方便就找到這個庫的下載文件夾。其他操作系統就自行搜索吧,總之找見這個項目的下載文件夾就ok。
這個下載文件夾中包含了這個項目所需要的所有東西:包括aar、jar等文件。
後面會以一個例子詳細講解這個過程
註:
Everything是一個搜索軟體,可以瞬間搜索全盤。
是一個非常實用的軟體。但是很可惜只有windows版本。
官網地址:<a href="<a href="https://www.voidtools.com/" target="_blank">https://www.voidtools.com/</a>" target="_blank"><a href="https://www.voidtools.com/" target="_blank">https://www.voidtools.com/</a></a>
三. 如何使用aar
想要使用aar文件,需要經過以下幾步:
1. 在app的build.gradle中加入以下配置
repositories {
flatDir {
dirs 'libs' // aar目錄
}
}
2. 將aar文件拷貝到app/libs目錄下
3. 在dependencies中加入aar引用
compile(name: 'zbar-release', ext: 'aar')
四. LeakCanary項目示例
因為Mole的例子比較簡單,所以選擇遠程代碼庫作為示例。
這里使用一個經常使用的內存檢測項目LeakCanary來做一個示例。
我們通常使用依賴來使用這個庫:
debugCompile 'com.squareup.leakcanary:leakcanary-android:1.3'
releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.3'
當Sync Now完成後,我們可以在C盤(windows)找見這個項目文件夾。
這個文件夾下面就有我們需要的兩個依賴庫:leakcanary-android和leakcanary-android-no-op
點開leakcanary-android文件夾,目錄結構如下(1.3是對應的版本號):
leakcanary-android文件夾
打開最里層的文件夾,你會發現文件的類型主要有三種:
jar文件:有的項目是以jar文件形式提供
aar文件:有的項目是以aar文件形式提供
pom文件: (Project Object Model),實際上就是個xml,是對一些必要信息的說明。這里我們只關心一個節點信息:<dependencies>:聲明依賴列表
我們用文本編輯器打開leakcanary-android文件夾下面的pom文件:
...
<dependencies>
<dependency>
<!--包組 id,通常是發布者擁有的域名的反向,以免跟別人的重復-->
<groupId>com.squareup.leakcanary</groupId>
<!--包 artifactId,其實就是組以下應該有一個更小的歸類-->
<artifactId>leakcanary-analyzer</artifactId>
<!--版本號-->
<version>1.3</version>
<scope>compile</scope>
</dependency>
</dependencies>
..
當我們打開leakcanary-android的pom文件,
我們發現leakcanary-android依賴於leakcanary-analyzer的1.3版本。
同樣的的我們打開leakcanary-analyzer 的pom文件,
發現leakcanary-analyzer依賴leakcanary-watcher和haha。
leakcanary-watcher和haha則沒有依賴任何東西。
這樣整個leakcanary-android導入本地的東西就是四個:
leakcanary-android
leakcanary-analyzer
leakcanary-watcher
haha
同樣的方式去一層一層解析leakcanary-android-no-op,將所有需要的文件都導入到AndroidStudio中。這樣整個LeakCanary就被我們真正實現本地化了。
debugCompile 'com.squareup.leakcanary:leakcanary-android:1.3'
releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.3'
debugCompile(name: 'leakcanary-android-1.3', ext: 'aar')
compile files('libs/leakcanary-analyzer-1.3.jar')
compile files('libs/leakcanary-watcher-1.3.jar')
compile files('libs/haha-1.1.jar')
releaseCompile(name: 'leakcanary-android-no-op-1.3', ext: 'aar')
這樣就將整個LeakCanary項目完全轉換成了本地的依賴。
B. Zxing Zbar 結合真正的極速秒掃
二維碼掃描功能在APP開發中不可或缺,但市面上的現成Demo往往存在各種bug,如預覽變形、圖像拉伸、識別速度慢等問題。為了提供更穩定高效的體驗,我們決定自建掃描功能。最初考慮使用ZXing進行相機預覽,配合ZBar解碼,理論上速度會有所提升,但實際操作中,遇到多個問題。
在整合ZXing與ZBar時,我們發現將數據進行旋轉以適應豎屏掃描變得困難,因為ZXing不支持橫向掃描二維碼。經過分析,發現旋轉數據的代碼在RedMi 3手機上的執行時間約為600ms,導致豎屏掃描速度明顯減慢。為解決此問題,我們採取了以下步驟:
首先,編譯ZXing,使用Maven構建項目,確保環境配置正確,將生成的jar包復制到ZXing項目的Android目錄中。
接著,優化ZXing以支持豎屏掃描。修改CameraManager類的getFramingRect()方法,調整掃描框尺寸為正方形。在DecodeHandler類的decode方法中,加入代碼進行相機數據旋轉。通過這些優化,掃描功能在豎屏下得以實現,但速度仍然較慢。
為了進一步提升解碼速度,我們使用C語言編寫數組轉換函數,編譯成SO庫,替換掉解碼方法中的數組轉換過程。此優化使得速度提升近20倍,解決了解碼速度慢的問題。
此外,我們還提供選擇模式,用戶可根據需求在兼容模式(使用ZXing解碼)和高速模式(使用Zbar解碼)之間切換,以兼容不同功能需求。經過上述優化和整合,我們成功實現了快速、穩定的二維碼掃描功能,滿足了用戶對於掃描效率和體驗的高要求。
C. android開發 如何實現掃描本地二維碼圖片
開源的二維碼掃描庫主要有zxing和zbar,zbar在iPos平台上應用比較成熟,而在Android平台上主流還是用zxing庫,因此這里主要講述如何利用zxing進行二維碼開發。
如何將zxing的Android源碼導入工程。
在導入zxing的android源碼之前,先去官方下載zxing的源碼http://code.google.com/p/zxing/downloads/list。
這里以1.6版本為例,zxing 1.6源碼結構如下:
<?xmlversion="1.0"encoding="utf-8"?>
<manifestxmlns:android="http://schemas.android.com/apk/res/android"
package="com.qrcode"
android:versionCode="1"
android:versionName="1.0">
<uses-sdkandroid:minSdkVersion="7"/>
<uses-permissionandroid:name="android.permission.VIBRATE"/><!--震動許可權-->
<uses-permissionandroid:name="android.permission.CAMERA"/>
<uses-featureandroid:name="android.hardware.camera"/><!--使用照相機許可權-->
<uses-featureandroid:name="android.hardware.camera.autofocus"/><!--自動聚焦許可權-->
<applicationandroid:icon="@drawable/icon"android:label="@string/app_name">
<activityandroid:name=".MainActivity"
android:label="@string/app_name">
<intent-filter>
<actionandroid:name="android.intent.action.MAIN"/>
<categoryandroid:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<!--隱藏鍵盤--><!--全屏-->
<activity
android:configChanges="orientation|keyboardHidden"
android:name="com.zxing.activity.CaptureActivity"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
android:windowSoftInputMode="stateAlwaysHidden">
</activity>
</application>
</manifest>
這種情況大致就可以實現二維碼掃描了,想細化的話,還可以多看看安卓二維碼掃描開發相關的教程