1. 程式人生 > >插件項目app化說明

插件項目app化說明

必須 fragment 權限 邏輯 Go UNC jar 現在 容易出錯

主要工作:

  • 添加app productFlavor,同一套代碼可以編譯出插件和app
  • 用Activity承載LauncherFragment
  • 解決包依賴問題
  • 權限申請(賬號權限、cde權限)
  • 處理包名變更引起的問題
  • 添加app升級功能
  • 相關UI、體驗設計

使用Activity承載入口Fragment

  • 添加入口Activity
  • 把LauncherFragment的view設置為Activity的contentView(比add fragment的方式view層級低&避免Fragment的回收重建問題)
  • 手動調用LauncherFragment的生命周期函數
  • 實現之前宿主Activity的接口,並提供關鍵實現

解決包依賴問題

插件引用了launcher的一些類和功能,插件不用把那些類編譯進dex,只需要編譯通過,所以有很多jar都是provided的方式。

作為獨立app,需要把那些jar編譯到dex裏邊。

遇到了兩個問題:

  1. jar類沖突
    1. 改為compile方式之後,遇到了jar類沖突的問題。之前的jar設置不合理,多個jar會含有相同的一些類,如果都compile進去,就沖突了。
    2. 解決辦法:解壓jar,把多余的類刪掉,重新打包jar(Java Jar包壓縮、解壓使用指南 https://www.cnblogs.com/javastack/p/8761248.html)。
  2. 方法數超過64K(已經有混淆和去資源冗余了)
    1. 之前很多jar並沒有編譯到dex裏邊,改為compile方式之後,方法數就超標了
    2. 處理方法:
      1. 清理代碼(刪除老舊不用的功能代碼和相關jar)
      2. 減去對fresco的依賴(插件化的情況下,freso是不編譯進dex的。app話fresco會引入大量的代碼和so,我們沒有大部分功能使用的ImageLoader,可以去掉fresco。fresco還會引入so,作為系統app,必須把so放到system/lib,現在已經有系統應用把so放到system/lib了,如果我們也用fresco,那麽必須考慮so的版本問題,代價高,容易出錯)。

權限申請(賬號權限、cde權限)

之前宿主有申請賬號的權限,作為app運行之後,必須自己申請賬號等權限,申請加入白名單等

處理包名變更引起的問題

宿主統一修改了插件的包名,在插件裏邊,所有的標準api獲取的包名都是宿主的。改為app之後,這些ap獲取的包名就是插件自己的包名了。

包名變動涉及:定向廣播、廣告sdk對包名的判斷、其他子功能對包名的判斷

app升級功能

插件的升級是宿主統一管理的,app話之後,需要自己考慮升級功能。升級方式有兩種:

  1. 使用應用商店的靜默升級功能
  2. 自己添加升級邏輯&UI。使用通過升級sdk,能夠快速完成升級邏輯。

相關UI、體驗設計

  1. Logo
  2. 啟動圖
  3. 大背景圖&loading背景圖
  4. 多桌面插件情況下,左鍵、上鍵、右鍵都有對應的功能,例如切桌面、呼出通知欄。app的情況下,就能重新定義這些按鍵了。

插件項目app化說明