使用 HBuilderX 前期可以很方便的開發調試功能模塊,但到了打包這個步驟就犯愁;
作為學習或預研框架使用云打包,有次數和云打包等待耗時的情況
官網的離線打包文檔,看著又有些不知所措
那么接下來,梳理一道 uniapp 離線打包思路,看能否順利通關
前置環境條件
在開始前,請確保已安裝
- Android Studio 下載地址:Android Studio官網 OR Android Studio中文社區
- HBuilderX
離線打包步驟概覽
- HBuilderX 生成本地打包app資源
- uniapp 所須的離線SDK下載
- AS(Android Studio) 導入 HBuilderX 生成本地打包app資源
- AS 配置 build.gradle 文件
- AS 配置 AndroidManifest.xml 文件
HBuilderX 相關
1、新建uniapp項目,此處項目名為 demo,使用的默認模板
新建項目 demo
2、選中demo項目,生成本地打包App資源
生成本地打包App資源
導出信息
3、新建一個文件夾,將導出的文件放入其中,以便后續操作
整理資源1
至此,HBuilderX 相關操作結束
uniapp 所須的離線SDK下載
1、根據 HBuilderX 的版本下載所須的離線SDK,如當前我的 HBuilderX 版本 是 2.7.14.20200618
,須下載 2020年06月19日發布
的SDK
匹配版本
2.1、將下載解壓后文件夾下 SDK ==> assets ==> data 目錄拷貝至 上一步新建的demo-resource
目錄
拷貝data文件夾
2.2、修改 demo-resource ==> data文件夾里的 dcloud_control.xml
文件,將appid修改為項目本身的appid
修改appid
3、將下載解壓后文件夾下 SDK ==> libs 目錄下
lib.5plus.base-release.aar
android-gif-drawable-release@1.2.17.aar
uniapp-release.aar
-
miit_mdid_1.0.10.aar
四個文件拷貝至上一步新建的demo-resource
目錄
拷貝所須SDK
至此,uniapp 所須的離線SDK下載相關操作結束
Android Studio 操作
1、新建 No Activity 項目
新建no activity 項目
android項目基本信息
2、調整視圖,將默認的 Android 調整為 Project,方便目錄游覽操作
調整視圖
3、修改項目根目錄下的 build.gradle
文件,將倉庫地址修改為國內鏡像,加快后續下載速度
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
//將
google()
//替換為
maven { url 'https://maven.aliyun.com/repository/google' }
//將
jcenter()
//替換為
maven { url 'https://maven.aliyun.com/repository/jcenter' }
}
dependencies {
classpath 'com.android.tools.build:gradle:3.6.1'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
//將
google()
//替換為
maven { url 'https://maven.aliyun.com/repository/google' }
//將
jcenter()
//替換為
maven { url 'https://maven.aliyun.com/repository/jcenter' }
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
修改倉庫鏡像地址
4、app ==> src ==> main 目錄下新增 assets 目錄
5、app ==> src ==> main ==> assets 目錄下新增 apps; 注意是 apps
不是 app
6、將之前生成本地打包app資源 放到 app ==> src ==> main ==> assets ==> apps 目錄下; 可從之前我們保存的 demo-resource 臨時文件夾里直接獲取
7、將臨時文件夾 demo-resource 里的 data 文件拷貝到 app ==> src ==> main ==> assets 目錄下
8、將臨時文件夾 demo-resource 里的 android-gif-drawable-release@1.2.17.aar
lib.5plus.base-release.aar
miit_mdid_1.0.10.aar
uniapp-release.aar
四個文件拷貝至 app ==> libs 目錄下
導入資源最終目錄效果圖
9、修改 app 目錄下 build.gradle 文件
- 9.1 修改 android 配置節點,在其下,新增配置節點
aaptOptions {
additionalParameters '--auto-add-overlay'
ignoreAssetsPattern "!.svn:!.git:.*:!CVS:!thumbs.db:!picasa.ini:!*.scc:*~"
}
- 9.2 修改 dependencies配置節點,在其下,新增配置
implementation fileTree(dir: 'libs', include: ['*.aar', '*.jar'], exclude: [])
implementation "com.android.support:support-v4:28.0.0"
implementation "com.android.support:appcompat-v7:28.0.0"
implementation 'com.android.support:recyclerview-v7:28.0.0'
implementation 'com.facebook.fresco:fresco:1.13.0'
implementation "com.facebook.fresco:animated-gif:1.13.0"
implementation 'com.github.bumptech.glide:glide:4.9.0'
implementation 'com.alibaba:fastjson:1.1.46.android'
增加應用配置
10、修改 app ==> src ==> main ==> AndroidManifest.xml 文件,新增節點
<activity
android:name="io.dcloud.PandoraEntry"
android:configChanges="orientation|keyboardHidden|keyboard|navigation"
android:label="@string/app_name"
android:launchMode="singleTask"
android:hardwareAccelerated="true"
android:theme="@style/TranslucentTheme"
android:screenOrientation="user"
android:windowSoftInputMode="adjustResize" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="io.dcloud.PandoraEntryActivity"
android:launchMode="singleTask"
android:configChanges="orientation|keyboardHidden|screenSize|mcc|mnc|fontScale|keyboard"
android:hardwareAccelerated="true"
android:permission="com.miui.securitycenter.permission.AppPermissionsEditor"
android:screenOrientation="user"
android:theme="@style/DCloudTheme"
android:windowSoftInputMode="adjustResize">
<intent-filter>
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<action android:name="android.intent.action.VIEW" />
<data android:scheme="h56131bcf" />
</intent-filter>
</activity>
AndroidManifest新增節點配置
至此,項目相關的配置已經結束。注意 如果涉及到權限(調用攝像頭等),需要在AndroidManifest.xml中進行配置,文本未涉及。
接下來,我們走下程序,看是否能順利跑起來,此處我用的是模擬器測試 (模擬器的設置里需要打開 允許ADB連接)
運行測試
離線打包
1、AS(Android Studio) 菜單欄選擇 build ==> Generate Signed Bundle /APK
離線打包1
2、選擇APK,點擊next
離線打包2
3、打包需要簽名,點擊Create new
離線打包3
4、設置 jks文件名,及其保存位置(此處我保存的位置是在桌面)
離線打包4
5、填寫密碼和確定密碼,因為是演示,我把密碼設置為 123456。
下面First and Last Name為名字和姓氏
Organizational Unit為組織單位
Organization 為組織
City or Locality為城市或地區
State or Province為州或者省份
Country Code(XX)為國家
至少選填一種,這里我直接填上國家China。
離線打包5
6、回到簽名界面,已默認填好,Next即可
離線打包6
7、選擇 release后,同時勾選V1 V2,點擊finish,完成打包
V1和V2的選擇問題,V1屬于舊的驗證方式,V2是在安卓版本7.0之后新的驗證方式,只勾選V1在Android7.0以上不會使用更安全的驗證方式,如果只勾選V2那么安卓版本7.0以下的手機將無法正常安裝,所以建議V1和V2同時勾選。
debug和release,一個是測試版一個是正式版,這里我直接選擇release
離線打包7
8、安裝打包好的apk,收獲離線打包成功的喜悅
離線打包8
離線打包成功運行
至此,離線打包完結。
回顧總結
- 請確保 HBuilderX 生成本地打包app資源中,manifest.json 文件里 appid 屬性有值
- 請確保 dcloud_control.xml 文件中 appid 與 manifest.json 中 appid 一致
- AS項目里 app ==> src ==> main ==> assets 目錄下新增是 apps; 注意是 apps 不是 app
- 本文暫時并未涉及權限調用,如有涉及需要配置 AndroidManifest.xml
搞定收工,希望你也順利的完成了離線打包。