白話 uniapp 離線打包(Android)

使用 HBuilderX 前期可以很方便的開發調試功能模塊,但到了打包這個步驟就犯愁;
作為學習或預研框架使用云打包,有次數和云打包等待耗時的情況
官網的離線打包文檔,看著又有些不知所措
那么接下來,梳理一道 uniapp 離線打包思路,看能否順利通關

前置環境條件

在開始前,請確保已安裝

離線打包步驟概覽

  • 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 文件中 appidmanifest.jsonappid 一致
  • AS項目里 app ==> src ==> main ==> assets 目錄下新增是 apps; 注意是 apps 不是 app
  • 本文暫時并未涉及權限調用,如有涉及需要配置 AndroidManifest.xml

搞定收工,希望你也順利的完成了離線打包。

參考文檔

1、官方文檔
2、網友文獻

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,316評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,481評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,241評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,939評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,697評論 6 409
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,182評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,247評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,406評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,933評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,772評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,973評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,516評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,209評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,638評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,866評論 1 285
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,644評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,953評論 2 373