首先湘今,建議參考此文章
https://cloud.tencent.com/developer/article/1912599
在進(jìn)入主題之前,請(qǐng)確保你的項(xiàng)目中已經(jīng)包含Android + Java + Fluuter + Dart等開發(fā)環(huán)境垃它,且已經(jīng)懂得如何使用Fluuter的本地依賴扶踊。
否則可以參考我的項(xiàng)目,先學(xué)會(huì)Android怎么配置Fluuter本地依賴:
https://github.com/yanjunhui2014/FlutterApp
https://github.com/yanjunhui2014/fz_flutter_share
以上2個(gè)項(xiàng)目需要拷貝至同一級(jí)目錄,而且由于Dart+FluuterSDK版本的原因营袜,可能會(huì)有一些兼容問題需要調(diào)試路捧。
但如果滿足以上條件关霸,則可以繼續(xù)往下。
但是我在添加完packageHelper.sh并且執(zhí)行之后鬓长,遇到如下問題谒拴。
1尝江、mvn指令不支持
原因:沒有安裝Maven環(huán)境
解決(mac電腦):https://wangxin1248.github.io/life/2020/02/mac-install-maven.html
windows電腦自己去找下怎么安裝maven+配置環(huán)境變量即可涉波。
2、修改配置后炭序,執(zhí)行packageHelper.sh啤覆,但是maven始終無法上傳成功
原因:
解決:
可以自己手動(dòng)賦值,推薦賦值規(guī)則如下
例如你的maven地址是
com.tencent.tinker:tinker-android-lib:0.0.1
那么
groupId="com.tencent.tinker"
artificatId="tinker-android-lib"
只是舉一個(gè)例子惭聂,學(xué)會(huì)舉一反三窗声,不要生搬硬套
3、改完之后辜纲,Nexus上能夠查看到相應(yīng)的maven庫(kù)笨觅,但是,始終無法拉取成功耕腾,原因未知
當(dāng)然见剩,也有可能你運(yùn)氣好,這里就通過了扫俺。如果你遭遇和我一樣苍苞,就繼續(xù)往下看。
分析來分析去狼纬,我也不知道是啥原因?qū)е碌母恰N揖妥聊ミ@packageHelper.sh到底是干啥的。好在代碼不多疗琉,就湊合著看了看冈欢。發(fā)現(xiàn)它只做了2件事。
第一盈简、build aar涛癌。
第二、上傳aar送火。
build aar肯定是不會(huì)有問題的拳话,那就把重點(diǎn)放在上傳上。
我們來分析下.sh中的代碼
echo "aar打包完成种吸,開始上傳maven..."
#方法 修改所有pom文件的名稱
function renameAllPomArtifactId() {
find build/host/outputs/repo -name "*.pom" | while read -r file
do
sed -i -e "s/>$1</>$2</g" $file
done
}
#第一次遍歷repo文件夾下所有后綴名為.aar的文件
find build/host/outputs/repo -name "*.aar" | while read -r file
do
#當(dāng)前aar文件所在的目錄
currDirName=$(dirname $file)
aarName=$file
#當(dāng)前aar文件對(duì)應(yīng)的pom文件(aar和pom一一對(duì)應(yīng))
pomName="$currDirName/$(basename $file .aar).pom"
#從pom文件中讀取出groupId信息
groupId=$(awk '/<groupId>[^<]+</groupId>/{gsub(/<groupId>|</groupId>/,"",$1);print $1;exit;}' $pomName)
#從pom文件中讀取出artifactId信息米奸,但是此時(shí)的artifactId并不是我們?cè)趐roperties中配置的丈咐,而是編譯器自動(dòng)生成的
artifactId=$(awk '/<artifactId>[^<]+</artifactId>/{gsub(/<artifactId>|</artifactId>/,"",$1);print $1;exit;}' $pomName)
#修改artifactId為在properties中配置的
renameAllPomArtifactId $artifactId $projectName
done
#第二次遍歷repo文件夾下所有后綴名為.aar的文件,為什么要二次遍歷谷婆?
#為了防止pom中的artifactId還沒有全部修改完便被上傳到maven引起的問題
find build/host/outputs/repo -name "*.aar" | while read -r file
do
#當(dāng)前aar文件所在的目錄
currDirName=$(dirname $file)
aarName=$file
#當(dāng)前aar文件對(duì)應(yīng)的pom文件(aar和pom一一對(duì)應(yīng))
pomName="$currDirName/$(basename $file .aar).pom"
#從pom文件中讀取出groupId信息
groupId=$(awk '/<groupId>[^<]+</groupId>/{gsub(/<groupId>|</groupId>/,"",$1);print $1;exit;}' $pomName)
#從pom文件中讀取出artifactId信息,此時(shí)已經(jīng)修改為properties中配置的
artifactId=$(awk '/<artifactId>[^<]+</artifactId>/{gsub(/<artifactId>|</artifactId>/,"",$1);print $1;exit;}' $pomName)
echo "正在上傳 = $aarName ..."
可以看到饰序,這一段代碼中,有修改文件名的作用,那么我推測(cè)可能就是這個(gè)過程降允,導(dǎo)致我aar最終無法從maven上同步的原因。
既然如此艺糜,那么就開干剧董,把這一段代碼刪掉,然后做一定量適當(dāng)?shù)母膶懀纯茨懿荒艹晒Α?/p>
下面貼上我寫的 uploadMaven.sh
注意
/build/host/outputs/repo/com/example/ai_teacher_flutter_module/flutter_release
一定要替換成你們自己的地址
aarFile="$project_path/build/host/outputs/repo/com/example/ai_teacher_flutter_module/flutter_release/$buildVersion/flutter_release-$buildVersion.aar"
pomFile="$project_path/build/host/outputs/repo/com/example/ai_teacher_flutter_module/flutter_release/$buildVersion/flutter_release-$buildVersion.pom"
#!/bin/bash
# shellcheck disable=SC2086
# shellcheck disable=SC2001
# shellcheck disable=SC2005
# shellcheck disable=SC2016
#引入配置文件
PROPERTIES="package.properties"
#maven依賴三要素
packageNameV=""
projectNameV=""
buildVersionV=""
#maven倉(cāng)庫(kù)地址
mavenRepositoryV=""
mavenSnapshotsV=""
#是否為release版本
isRelease=$1
#當(dāng)前使用的倉(cāng)庫(kù)破停,根據(jù)isRelease的不同而不同
usedMavenRepo=""
#讀取配置文件信息并做容錯(cuò)處理
if [ -f "$PROPERTIES" ]
then
. $PROPERTIES
packageNameV=$packageName
projectNameV=$projectName
buildVersionV=$buildVersion
if [ -z "$packageNameV" ]; then
echo ERROR:"package.properties文件中沒有配置packageName!"
exit 1
fi
if [ -z "$projectNameV" ]; then
echo ERROR:"package.properties文件中沒有配置projectName!"
exit 1
fi
if [ -z "$buildVersionV" ]; then
echo ERROR:"package.properties文件中沒有配置buildVersion!"
exit 1
fi
mavenRepositoryV=$mavenRepository
mavenSnapshotsV=$mavenSnapshots
if [[ -z "$mavenRepositoryV" ]] && [[ -z "$mavenSnapshotsV" ]]
then
echo ERROR:"請(qǐng)檢查是否在package.properties中正確配置了maven倉(cāng)庫(kù)信息!"
exit 1
fi
else
echo ERROR:"請(qǐng)先根據(jù)要求配置package.properties文件然后執(zhí)行該腳本!"
exit 1
fi
#打包前清理
echo "flutter clear..."
flutter clean
#打包前獲取依賴
echo "flutter pub get..."
flutter pub get
echo "flutter pub get..."
#根據(jù)isRelease執(zhí)行不同的打包邏輯
#if [ $isRelease = "true" ]
#then
#打包release版本翅楼,避免生成多余的包導(dǎo)致資源浪費(fèi),//--target-platform android-arm ,--no-profile --no-debug
flutter build aar --build-number "$buildVersionV" --no-profile --no-debug
#else
# #打包debug版本,避免生成多余的包導(dǎo)致資源浪費(fèi),//--target-platform android-arm , --no-profile --no-release
# flutter build aar --build-number "$buildVersionV" --no-profile --no-release
#fi
project_path=$(cd `dirname $0`; pwd)
aarFile="$project_path/build/host/outputs/repo/com/example/ai_teacher_flutter_module/flutter_release/$buildVersion/flutter_release-$buildVersion.aar"
pomFile="$project_path/build/host/outputs/repo/com/example/ai_teacher_flutter_module/flutter_release/$buildVersion/flutter_release-$buildVersion.pom"
echo "打包完成"
echo "打包指令 deploy:deploy-file -DgroupId=$packageName -DartifactId=$projectName -Dpackaging=aar Dversion=$buildVersionV Dfile=$aarFile DpomFile=$pomFile -Durl="
#執(zhí)行上傳maven倉(cāng)庫(kù)命令
mvn deploy:deploy-file \
-DgroupId=$packageName \
-DartifactId=$projectName \
-Dpackaging=aar \
-Dversion=$buildVersion \
-Dfile=$aarFile \
-DpomFile=$pomFile \
-Durl=http://admin:admin123@10.10.1.211:8081/nexus/content/repositories/releases/
finishEcho $packageNameV $projectName
另外貼上package.properties
projectName=flutter_release
packageName=com.example.ai_teacher_flutter_module
buildVersion=3.0
mavenRepository=http://admin:admin123@youServerIp:8081/nexus/content/repositories/releases/
mavenSnapshots=http://admin:admin123@youServerIp:8081/nexus/content/repositories/snapshots/
然后:在項(xiàng)目終端(Terminal)中執(zhí)行
uploadMaven.sh
若出現(xiàn) zsh: permission denied: xxx
則使用 chmod u+x *.sh 解決
項(xiàng)目中添加依賴:
implementation 'com.example.ai_teacher_flutter_module:flutter_release:3.0'
同步即可真慢,問題解決毅臊。