版權聲明:java
本帳號發佈文章均來自公衆號,承香墨影(cxmyDev),版權歸承香墨影全部。android
未經容許,不得轉載。模塊化
由於業務須要,須要把手上一個項目,按模塊拆分出來,進行模塊化處理,來適應不一樣的版本需求。大體的流程就是按模塊化的思想,將各個業務進行拆分,總之就是一堆解耦的操做。模塊化的好處有不少,這裏就不一一說明了。設計
肯定好須要拆分的模塊以後,其實具體業務代碼都是現成的,只是須要制定好接口,而後"有技巧"的複製現有代碼到各個該在的模塊內就能夠了。在這個過程當中,碰到一些問題,在一些原有代碼中,使用 switch-case 操做一些 IDs 的資源的時候,本來是沒有問題的,可是當它被複制到 Android Library 中的時候,就開始提示錯誤了,表示沒法這樣使用,下面就這個問題來進行一個簡單的講解,並提供一個快速解決的方法。3d
咱們先來看看報錯信息。code
那麼是什麼致使出現這樣的問題呢?cdn
咱們知道,switch 語句的 case 操做必須是一個常量。而在 App Module 中,IDs 自己在 R.java 中就是被定義爲一個一個常量而存在的,那麼在 Android Library 中,這一點是否會有變化呢?blog
先來看看 App 的 R.java。接口
而官方其實也有資料來講明這個問題。ip
tools.android.com/tips/non-co…
有興趣的能夠直接閱讀原文,大體的意思是在 SDK Tools r14 開始,在 Library Module 中,會將 IDs 的資源,聲明爲 static 而非 static final 。
而這麼設計的緣由是,在多個 Module 組合的項目中,若是須要確保每一個 Module 中的 IDs 資源的值在整個項目中都是惟一的話,就須要每次編譯的時候都將全部的資源和相關的 Java 代碼與主項目一塊兒從新編譯,爲每一個 IDs 的資源,都生成一個惟一的值,這樣就會影響構建的效率。同時它也限制了發佈 Android Library 就必須發佈源碼,從而限制了 Android Library 的使用範圍。因此在 SDK Tools r14 開始,就將 Android Library 中的 IDs 標記爲非 final 類型的。
而官方也提供瞭解決方案,就是使用 if-else 語句替換 switch-case 語句。若是咱們是從零開始編寫邏輯,直接使用 if-esle 來編寫這種邏輯便可,可是咱們是在 copy 一個現有的項目,那麼問題就變成了,如何快速的將 switch-case 替換爲 if-else 語句。
在 Android Studio 中,是提供了快捷鍵來一鍵替換的。若是沒有修改過,在 Mac 中,快捷鍵是 command + return
,在 Windows 中,快捷鍵是 Alt + Enter
。
自己這樣的一件事情,根據 提示就解決了,可是做爲開發者,不該該只是知足解決問題,應該從更深層次的來探討問題的緣由,爲何如此設計,如何快速的解決這個問題。