《Android 插件化框架VirtualAPK :(一)基本集成》

一、VirtualAPK 介紹

VirtualAPK 是我們推出的一款Android平臺上的插件化方案,通過VirtualAPK,可以讓APP無需重新發版即可上線新功能。

之所以做這件事,是因爲傳統的開發流程中,APP進行版本迭代的時候,有着嚴格的時間週期的要求,必須在規定的時間點完成功能開發,也必須在規定的時間點完成渠道投放,這就讓APP的版本迭代有了一定的限制,無法做到APP的隨時更新,於是我們開發了VirtualAPK,通過VirtualAPK,APP發版將不再有時間點的限制,可以隨心所欲地按需更新。

爲了實現這一功能,我們首先將一個APP拆成兩個部分,分別爲宿主和插件,其中宿主中沒有或者只有少量無需更新的邏輯,而所有的業務邏輯代碼則位於插件中,每次APP更新的時候,我們只需要更新插件即可。在技術上,通過Android的動態加載機制來加載插件,並完成了對各個版本Android系統的攔截,使得插件的開發和傳統的Android開發保持一致,支持插件的代碼、資源訪問,並支持四大組件。

二、集成過程

遇到的問題:
1. 可以跳轉,但是跳轉到了宿主的activity?
原因:插件佈局文件名稱與宿主頁面名稱一致;
2. 可以跳轉,生命週期也執行了,但是白板?
問題:編譯失敗的問題
3. Error:A problem occurred configuring project ':app_plugin'. > The directory of host application doesn't exist!
解決辦法:修改宿主路徑;
4. Error:A problem occurred configuring project ':app_plugin'. > Can't find D:\workspaceghnice\RPluguin\VAHostDemo\app\build\VAHost\Host_R.txt, please check up your host application need apply com.didi.virtualapk.host in build.gradle of host application
解決辦法:在App的工程模塊的build.gradle添加使用gradle插件;
同時clean project;
5. Can't find D:\workspaceghnice\RPluguin\VAHostDemo\app\build\VAHost\versions.txt
在4的基礎上 rebuild project;
6. Error:A problem occurred configuring project ':app_plugin'. > Failed to notify project evaluation listener. > com/android/builder/dependency/ManifestDependency
修改項目gradle 版本爲2.1.3 (原來是2.2.3)
7. Error:Execution failed for task ':app_plugin:transformClassesAndResourcesWithStrippedForRelease'. > Cannot cast object 'null' with class 'org.codehaus.groovy.runtime.NullObject' to class 'java.util.Set'
解決辦法:在宿主gradle 加 core 依賴;
8. 提示:宿主可以是debug,插件必須是release。你在buildTye裏面加個release。
9.PackageParser: Unknown element under <manifest>: meta-data at /storage/emulated/0/va_plugin.apk Binary XML file line #11
android.content.res.Resources$NotFoundException: File res/mipmap-xxhdpi-v4/ic_launcher.png from xml type layout resource ID #0x7f030000

解決辦法:將插件的清單文件使用的laucher 放在drawable 目錄;
10. Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
前提:宿主和插件的佈局文件名稱已經是不一致的。
11. Error:Execution failed for task ':app_plugin:transformClassesAndResourcesWithStrippedForRelease'. > Cannot cast object 'null' with class 'org.codehaus.groovy.runtime.NullObject' to class 'java.util.Set'
解決辦法:將插件工程與宿主工程單獨開來;

三、參考

介紹文檔:

1. infoq http://www.infoq.com/cn/news/2017/06/VirtualAPK-opensource
2. http://geek.csdn.net/news/detail/130917
3. 官網:https://github.com/didi/VirtualAPK
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章