前言
項目最早是我三年前寫的, 后來轉(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)在的眼光來看, 項目很啰嗦重復. 想加東西感覺也是費勁, 所以還得后面再找點時間將這些重構.