DataBinding 大坑總結(jié)(網(wǎng)上我暫時搜不到解決方法)

描述優(yōu)缺點(diǎn)和簡單使用
http://www.itdecent.cn/p/d4e384c98987

用戶指南
http://www.itdecent.cn/p/b1df61a4df77

在使用多Module中使用DataBinding會引發(fā)一些奇怪的問題,最近好好的騰出時間來折騰這些奇怪的問題:

1:如果當(dāng)Module啟動DataBinding重啟AS啟動報錯的話,就啟用允許多行代碼
android { 
  defaultConfig {
     multiDexEnabled true
  }
}
dependencies {
  //解決超過65546代碼的問題
  compile 'com.android.support:multidex:1.0.2'
}
2:為什么include的Toolbar(或者別的控件)在代碼里面顯示是View?因?yàn)檫@個Toolbar的布局代碼文件在Module,合并在app的時候,編譯所看到的是view,這個只能由Google后面優(yōu)化了,但是目前可以用這種方式來緩沖
public abstract class BaseFragmentListConditionDataBind<T, C, B extends ViewDataBinding> extends BaseFragmentListCondition<T, C> {

    public B mViewBinding;
    public ToolbarCommonBinding mToolbarCommonBinding;

    @Override
    public void initDataBind(View view) {
        mViewBinding = DataBindingUtil.bind(view);
        mToolbarCommonBinding = DataBindingUtil.bind(view.findViewById(R.id.toolbarCommon));
    }
}
3.因?yàn)閙odule使用DataBinding這系列奇怪問題
Error:Execution failed for task ':library:test:transformClassesAndResourcesWithPrepareIntermediateJarsForDebug'.
> failure, see logs for details.
  Error reading contents of H:\mobile\code\trunk\as\library\test\build\intermediates\data-binding-compiler\debug\dependent-lib-artifacts directory java.nio.file.NoSuchFileException: H:\mobile\code\trunk\as\library\test\build\intermediates\data-binding-compiler\debug\dependent-lib-artifacts
    at sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:79)
    at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:97)
    at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:102)
    at sun.nio.fs.WindowsDirectoryStream.<init>(WindowsDirectoryStream.java:86)
    at sun.nio.fs.WindowsFileSystemProvider.newDirectoryStream(WindowsFileSystemProvider.java:518)
    at java.nio.file.Files.newDirectoryStream(Files.java:457)
    at android.databinding.tool.DataBindingBuilder.getBRFilePackages(DataBindingBuilder.java:145)
    at android.databinding.tool.DataBindingBuilder.getJarExcludeList(DataBindingBuilder.java:128)
    at com.android.build.gradle.internal.LibraryTaskManager.lambda$excludeDataBindingClassesIfNecessary$19(LibraryTaskManager.java:688)

關(guān)于這個坑爹的問題我一直不敢確認(rèn)我這個是否正確,也折騰了我好幾天,我處理方式是把主項(xiàng)目的Module都引用到新項(xiàng)目的Module使用,然后獲取到具體的錯誤問題,我這邊獲取到問題是把com.github.chrisbanes:PhotoView:1.0.0升級成com.github.chrisbanes:PhotoView:2.1.3。然后再運(yùn)行主項(xiàng)目,這個問題又沒了,真的是超級超級蛋疼。

4.多個module之間,他們生成的layout。名稱絕對不能一樣。

不然會出現(xiàn)上面的一系列問題。

5.如果以上問題都解決不了,刪除app和module的所有build和.gradle文件夾,就可以解決了,關(guān)于第三個問題也是能用這個方法解決的
6.還是關(guān)于module之間的生成dataBinding的問題。關(guān)于這個問題我折騰了2,3天了,最后特意搞了一個小項(xiàng)目,這個問題目前google搜索不到,可能這種形式做法的相當(dāng)相當(dāng)少,但總算找到一個折騰的方式解決

假設(shè)我們有一個這樣的需求,module項(xiàng)目使用抽象基類,并且抽象基類已經(jīng)確定了生成好的databinding


2個抽象基類

最底層基類

第二個基類

至于基類的邏輯我們暫且不管,這不是重點(diǎn),重點(diǎn)是我們看這個app的實(shí)現(xiàn)類


實(shí)現(xiàn)類,大家可以看到,說找不到databinding,最開始我也以為是緩存原因,按照上面的方式全部解決,都不行,實(shí)在焦急啊??!最后……

兩種方式解決:


看到這種奇怪的方式解決了嗎?!標(biāo)記FragmentOrderBinding是哪個類的就可以解決這個問題了……
如果怕灰色不小心刪掉的話,可以使用這種泛型方式

反正最終就是在app的類里面,明確該DataBinding是屬于某個lib即可!

7.關(guān)于在module使用泛型DataBinding類時

會提示找不到所有生成的DataBinding。目前解決方式只能是module不用泛型DataBinding,只在app使用泛型DataBinding

8.databinding不存在

當(dāng)編譯錯誤的時候,會發(fā)現(xiàn)很多提示databinding不存在,如下圖


image.png

如果你拖到最下面,會看到真正導(dǎo)致錯誤的問題,如下圖


image.png

databinding有個問題,就是當(dāng)你本來正常的項(xiàng)目,一頓猛如虎的代碼操作后,運(yùn)行編譯出錯,會出現(xiàn)一種情況,全是提示databinding不存在,并沒有顯示真正導(dǎo)致錯誤的問題,如下圖
image.png

那么解決方式:
可能目前還未比較完善,我是用排除方式一個一個模塊進(jìn)行刪除,運(yùn)行,找到真正的錯誤,最后在這里發(fā)現(xiàn):


image.png

你們可以看到,錯誤提示里面,并沒有提示如圖中的代碼錯誤。這種問題是非常糾結(jié)非常糾結(jié)的!
如果有更好的解決方式,求指導(dǎo)!

8. gradle升級到4.6后,DataBinding編譯時報告參數(shù)過多

2019-9-27更新
這是最近碰到的一個問題,gradle4.1是沒有這個問題的,而4.6就報這個參數(shù)過多問題了,原因是每個DataBinding編譯生成的時候會在自動生成的類里面有個構(gòu)造函數(shù),而4.6的構(gòu)造函數(shù)不知道為什么會報參數(shù)過多。至于解決方法,我目前是又退回4.1了,google暫時搜不到什么解決方法

9. 當(dāng)編譯后只顯示編譯錯誤,沒有其他反饋的時候

可以輸入該命令:gradlew compileDebugJavaWithJavac

然后就能看到詳細(xì)的錯誤了
D:\yitu\MVVMRapid\app\src\main\java\com\my\mvvmrapid\MainActivity.java:4: 錯誤: 程序包c(diǎn)om.my.mvvmrapid.databinding不存在

按照豐富的經(jīng)驗(yàn)就是app沒有引入databinding

如果幫到您歡迎Star

一個非常豐富的開源庫,如果你需要相冊、錄制、錄音等操作,那么這個也許對你有一定的幫助:
zhongjhATC/AlbumCameraRecorder: ??一個高效的多媒體支持操作庫,可多方面的簡單配置操作相冊、拍照、錄制、錄音等功能。也支持配套使用的展示圖片、視頻、音頻的九宮格功能。 (An efficient multimedia support operation library, can be a variety of simple configuration operation album, photo, recording, recording and other functions.Also support supporting the use of the display of pictures, video, audio of the nine grid function.) (github.com)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容