記錄一次老Android項目遷移過程

前言

項目最早是我三年前寫的, 后來轉(zhuǎn)去別的項目組做新項目, 交接給了新同事. 大半年后公司大面積裁員, 緊急交接給我了. 由于項目處于將死狀態(tài)也就不管了. 后來試著跑了下, 好像沒能跑起來. 就大概看了下代碼.

印象較深的是, 原本項目, 數(shù)據(jù)庫就一個表, 我用sql語句寫的. 他需求多了個收藏, 然后就引用了greendao. 略感煩躁. 然后該升級的其它庫沒有做相應升級. 還停留在我第一次交接過去的狀態(tài). 所以說代碼快3年沒維護. 而且他那邊迭代的版本還沒做完, 也是頭大.

開始遷移

原本工程直接修改(失敗).

在遷移前, 我先將Android Stuio升級到了3.2. 然后將原有工程copy的一份, 然后用as打開project. 修改了幾下, 實在無從下. 最重要項目結(jié)構無法很好識別. 在這之前也升級過4年的老項目, 稍微改了下也就跑起來了. 這個怎么改都不行. 當初我接手就已經(jīng)不能跑成功, 另一個可能3.2比之前變化較大. copy打開了幾次都不行. 這樣不行的話, 只能多費力氣新建工程導入代碼了.

新建工程導入(成功)

首先建好空項目和主要的module. 那種只有幾個.java文件的module. 打算最后并到主項目, 能省點事, 畢竟最主要的是先跑起來. 保持項目名稱包名一致. 然后從依賴性最小的moudle開始, 將原module下的libs和src目錄copy過去. 然后手動修改build.gradle. 除了support包, 其它的庫先按原來的版本. 然后主項目加入該依賴, build, 修改問題, 通過. 再弄下一個module. 最后將主項目的代碼copy過來. 再build. 挨個修改問題.

問題記錄

  • Cannot resolve symbol 'CLIP_SAVE_FLAG'
    canvas里已經(jīng)將這些flag標記移除了, 改用save()就可以了.

  • Program type already present: android.support.v4.app.FragmentTransitionCompat21
    這個是不同版本support包沖突
    在Terminal中輸入指令 gradlew -q app:dependencies
    可以看到fresco:0.6.1依賴了android-support-v4:23.2.1, 升級到fresco:1.11.0解決.

  • nineoldandroids
    這個好早以前支持2.x加入的, 現(xiàn)在不需要了
    import改為android自帶的.
    ViewHelper.setX(view, value)改為view.setX(value)
    ViewHelper.getX(view)改為view.getX()

  • ViewHolder views must not be attached when created. Ensure that you are not passing 'true' to the attachToRoot parameter of LayoutInflater.inflate(..., boolean attachToRoot)
    這個報錯說的很明顯, 直接去對應adapter.
    找到

 public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            mLikesLayout.setId(R.id.layout_other_like);
            parent.addView(mLikesLayout, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
            root = mLikesLayout;
        return new RecyclerView.ViewHolder(root) {
        };
}

改為

 public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            mLikesLayout.setId(R.id.layout_other_like);
            mLikesLayout.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
            root = mLikesLayout;
        return new RecyclerView.ViewHolder(root) {
        };
}
  • 列表里一些item高度會鋪滿屏幕.
    這個是因為某個版本后, recyclerview改了行為, item根節(jié)點android:layout_height寫match_parent會鋪滿屏幕, 好在xml按照命名規(guī)范, 列表item布局以lvi_開頭, 直接挨個檢查, 修改對應xml根節(jié)點改為android:layout_height="wrap_content".

結(jié)束

到此為止, 大概大半天時間, 項目已經(jīng)能正常跑起來, 也順手解決了幾個bug. 像一些庫, 還停留在舊版本上, 可能還存在一些bug. 升級版本改動較大.

  • 如我封裝的http底層還是使用的apache HttpClient. 而現(xiàn)在基本okhttp一統(tǒng)天下.
  • EventBus 2.x/到3.x, 關鍵詞變更
  • butterknife 7.x到9.x, 關鍵詞變更
  • 一些國內(nèi)的sdk.
    由于一開始該項目倉促, 總是追趕需求, 當時功力也不夠. 雖然項目跑起來沒事, 但現(xiàn)在的眼光來看, 項目很啰嗦重復. 想加東西感覺也是費勁, 所以還得后面再找點時間將這些重構.
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,724評論 25 709
  • 用兩張圖告訴你,為什么你的 App 會卡頓? - Android - 掘金 Cover 有什么料? 從這篇文章中你...
    hw1212閱讀 13,898評論 2 59
  • afinalAfinal是一個android的ioc,orm框架 https://github.com/yangf...
    passiontim閱讀 15,835評論 2 45
  • 我喜歡虐的故事,因為虐心,是從心的部分去感受才能刻骨銘心,才能銘記,才能在日后回想的時候心的部分,即使過去很久,即...
    Angel愛Bryce斌閱讀 289評論 0 1
  • 有時候覺得,酒是人與仙(神)之間的橋梁,或有限的人類追尋永恒的一種手段。人世間少歡樂,于是創(chuàng)造酒來助長,酒后人方能...
    duguyu閱讀 277評論 0 0

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