android.support升級到androidx踩坑記錄

年前想著Google老大之前提醒過將項目升級到androidx奸腺,所以年前一通操作猛如虎把Android Studio唰唰升級到3.2.1,自然也把gradle升級到gradle-4.10.1-all。

沒想到這只是開始作死的第一步悴务,gradle升級的痛相信升級過的人都懂钞艇。

升級完項目后,不出所料的Android Studio呈現(xiàn)滿江紅的樣式窍箍,十分酸爽串纺。在我一次次修改,不斷clean又build項目椰棘,天真的以為馬上可以編譯通過在運(yùn)行成功時纺棺,現(xiàn)實總是冷冷的抽打我的臉,依舊有報錯邪狞,R文件都無法生成祷蝌,談何運(yùn)行。

改了3天帆卓,才差不多將各種報錯問題修改完成巨朦,項目成功運(yùn)行。

下面記錄一下修改的內(nèi)容剑令,也方便以后查閱糊啡。

升級Android Studio后,在 Refactor ---> Migrate to AndroidX 路徑下可以將整個項目升級到AndroidX吁津。

Migrate to AndroidX.png

所以接下來的修改也是在自動升級后的手動修改棚蓄。

文末參考文章是Google官方的說明,可以查看里面更詳細(xì)的指引和說明Migrating to AndroidX

本文目錄:

1.手動配置gradle.properties
2.app/build.gradle修改
3.java文件修改
4.布局文件xml修改
5.部分view不可用修改
6.其他問題
7.gradle命令幫助查找問題
8.參考文章

1.手動配置gradle.properties

android.enableJetifier=true
android.useAndroidX=true

2.app/build.gradle修改

修改前android.support 修改后androidx
compile implementation
testCompile testImplementation
debugCompile debugImplementation
releaseCompile releaseImplementation

當(dāng)然梭依,這部分主要是因為gradle升級后提示需要的更新挣柬。
沒寫全,只寫了主要的睛挚,Android Studio有提示邪蛔,根據(jù)提示更新就行。

android{
        //省略扎狱。侧到。。淤击。
        compileOptions {
            sourceCompatibility JavaVersion.VERSION_1_8
            targetCompatibility JavaVersion.VERSION_1_8
        }
}

3.java文件修改

這里主要指import的修改匠抗,Android Studio自動幫助項目升級成androidx時,很多控件的路徑在androidx中都變更了污抬,所以需要全局搜索一鍵替換汞贸。

全局替換: Edit ->Find -> Replace in path

列舉了一些常用的:

修改前android.support 修改后androidx
import androidx.appcompat.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import androidx.core.view.ViewPager; import androidx.viewpager.widget.ViewPager;
import androidx.core.view.PagerAdapter; import androidx.viewpager.widget.PagerAdapter;
import androidx.core.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.core.app.FragmentManager; import androidx.fragment.app.FragmentManager;
import androidx.core.app.FragmentTransaction; import androidx.fragment.app.FragmentTransaction;
import androidx.core.content.LocalBroadcastManager; import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import androidx.appcompat.widget.DefaultItemAnimator; import androidx.recyclerview.widget.DefaultItemAnimator;
import androidx.appcompat.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.appcompat.widget.GridLayoutManager; import androidx.recyclerview.widget.GridLayoutManager;
import androidx.appcompat.widget.StaggeredGridLayoutManager; import androidx.recyclerview.widget.StaggeredGridLayoutManager;
import android.support.design.widget.CoordinatorLayout; import androidx.coordinatorlayout.widget.CoordinatorLayout;
import android.support.design.widget.CoordinatorLayout; import androidx.coordinatorlayout.widget.CoordinatorLayout;
import android.support.design.widget.TabLayout; import com.google.android.material.tabs.TabLayout;
import android.support.design.widget.AppBarLayout; import com.google.android.material.appbar.AppBarLayout

當(dāng)整個項目因為未生成R文件滿江紅的時候,全局搜索替換這些常用控件會比較方便印机。

4.布局文件xml修改

3.java文件修改中羅列了一些控件矢腻,同樣也是全局搜索把這些對應(yīng)的控件修改成androidx的就好。

列舉幾個:

修改前android.support 修改后androidx
<android.support.v4.widget.NestedScrollView/> <androidx.core.widget.NestedScrollView/>
<android.support.v4.widget.Space/> <Space/>
<android.support.v7.widget.AppCompatTextView/> <TextView/>
<androidx.appcompat.widget.CardView/> <androidx.cardview.widget.CardView/>

注意I淙6喔獭疤孕!

不管是java還是xml也好耕魄,在Android Studio全局搜索的情況下還是有可能搜漏圈纺,所以可能還是需要挨個文件查看替換奋刽。

5.部分view不可用修改

之前手動拷貝了support包中的TabItem(TabLayout需要使用的一個類)出來使用,在升級到androidx后發(fā)現(xiàn)無法使用了茫藏。

support中的代碼:

    public TabItem(Context context, AttributeSet attrs) {
        super(context, attrs);

        final TintTypedArray a = TintTypedArray.obtainStyledAttributes(context, attrs,
               android.support.design.R.styleable.TabItem);
        mText = a.getText(android.support.design.R.styleable.TabItem_android_text);
        mIcon = a.getDrawable(android.support.design.R.styleable.TabItem_android_icon);
        mCustomLayout = a.getResourceId(android.support.design.R.styleable.TabItem_android_layout, 0);
        a.recycle();
    }

a.getText()碴裙、a.getDrawable()稠炬、a.getResourceId()都報錯沮趣,提示TintTypedArray.getText()或TintTypedArray.getDrawable()或TintTypedArray.getResourceId()只能在同一個library group(groupId=androidx.appcompat)中被調(diào)用屯烦,

從TintTypedArray的源碼可知,是在源碼中做了限制的原因:

@RestrictTo(LIBRARY_GROUP)
public class TintTypedArray {}

6.其他問題

app module所依賴的一些library我也升級到了androidx兔毒,在將library中的build.gradle里的compile修改成implementation的時候注意漫贞,如果這里依賴的對象需要全局使用的話,就要使用api關(guān)鍵字了育叁。

比如:

修改前:
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
}

修改后:
dependencies {
    api fileTree(dir: 'libs', include: ['*.jar'])
}

7.gradle命令幫助查找問題

在我一次又一次編譯項目時,始終找不到是java文件或者xml文件哪里出錯了芍殖,logcat豪嗽、message也不報錯,這種時候是最愁的。

直到我找到了大殺器:gradle命令

在terminal本項目路徑下使用下面這條命令來編譯項目:

./gradlew compileDebugJavaWithJavac

編譯不通過就會報錯龟梦,報錯信息里有報錯的文件以及錯誤的位置隐锭,這條命令幫了大忙,可以說是相當(dāng)感動了计贰,雙擊回車就是666钦睡。

以上就基本上寫完了,如果本文有錯誤或不妥之處歡迎大家指正和討論躁倒,謝謝荞怒。

參考文章

如果對你有幫助的話,點(diǎn)贊秧秉、評論褐桌、贊賞都是對我的鼓勵,也是支持我寫下去的動力象迎,謝謝荧嵌!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市砾淌,隨后出現(xiàn)的幾起案子啦撮,更是在濱河造成了極大的恐慌,老刑警劉巖汪厨,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件逻族,死亡現(xiàn)場離奇詭異,居然都是意外死亡骄崩,警方通過查閱死者的電腦和手機(jī)聘鳞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來要拂,“玉大人抠璃,你說我怎么就攤上這事⊥讯瑁” “怎么了搏嗡?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長拉一。 經(jīng)常有香客問我采盒,道長,這世上最難降的妖魔是什么蔚润? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任磅氨,我火速辦了婚禮,結(jié)果婚禮上嫡纠,老公的妹妹穿的比我還像新娘烦租。我一直安慰自己延赌,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布叉橱。 她就那樣靜靜地躺著挫以,像睡著了一般。 火紅的嫁衣襯著肌膚如雪窃祝。 梳的紋絲不亂的頭發(fā)上掐松,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天,我揣著相機(jī)與錄音粪小,去河邊找鬼大磺。 笑死,一個胖子當(dāng)著我的面吹牛糕再,可吹牛的內(nèi)容都是我干的量没。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼突想,長吁一口氣:“原來是場噩夢啊……” “哼殴蹄!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起猾担,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤袭灯,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后绑嘹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體稽荧,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年工腋,在試婚紗的時候發(fā)現(xiàn)自己被綠了姨丈。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡擅腰,死狀恐怖蟋恬,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情趁冈,我是刑警寧澤歼争,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站渗勘,受9級特大地震影響沐绒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜旺坠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一乔遮、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧价淌,春花似錦申眼、人聲如沸瞒津。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至病毡,卻和暖如春濒翻,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背啦膜。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工有送, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人僧家。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓雀摘,卻偏偏與公主長得像,于是被迫代替她去往敵國和親八拱。 傳聞我的和親對象是個殘疾皇子阵赠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評論 2 345