目录 一、演进历程与背景 二、 架构设计对比 1.Support Library 架构问题 2.AndroidX 架构优势 三、核心组件对比 1.基础 UI 组件 2. Support Library 版本 3.依赖配置对比 Support Library 依赖配置 AndroidX 依赖配置 四、迁移指南与实践 1. 自动迁移工具 2. 手动迁移映射表 3. 迁移实战示例 迁移前的 Support Library 项目 迁移后的 AndroidX 项目 五、 AndroidX 新特性详解 1. KTX 扩展库 2. Jetpack 组件集成 六、性能优化建议 七、 常见问题与解决方案 八、 总结对比
一、演进历程与背景
1. 历史发展脉络
Support Library v4 (2011)
↓
Support Library v7 (2013)
↓
Support Library 28.x (2018)
↓
AndroidX (2018 - 现在)
二、 架构设计对比
1.Support Library 架构问题
class SupportLibraryIssues {
val supportV4 = "com.android.support:support-v4:28.0.0"
val appCompatV7 = "com.android.support:appcompat-v7:28.0.0"
val design = "com.android.support:design:28.0.0"
}
2.AndroidX 架构优势
class AndroidXAdvantages {
val coreKtx = "androidx.core:core-ktx:1.9.0"
val appCompat = "androidx.appcompat:appcompat:1.6.1"
val material = "com.google.android.material:material:1.8.0"
}
三、核心组件对比
1.基础 UI 组件
2. Support Library 版本
< android.support.v7.widget.Toolbar
android: layout_width= " match_parent"
android: layout_height= " ?attr/actionBarSize"
android: background= " ?attr/colorPrimary" />
< android.support.v7.widget.RecyclerView
android: id= " @+id/recyclerView"
android: layout_width= " match_parent"
android: layout_height= " match_parent" />
< android.support.design.widget.FloatingActionButton
android: layout_width= " wrap_content"
android: layout_height= " wrap_content"
android: src= " @drawable/ic_add" />
public class MainActivity extends AppCompatActivity {
private RecyclerView recyclerView;
private FloatingActionButton fab;
@Override
protected void onCreate ( Bundle savedInstanceState) {
super . onCreate ( savedInstanceState) ;
setContentView ( R . layout. activity_main) ;
Toolbar toolbar = findViewById ( R . id. toolbar) ;
setSupportActionBar ( toolbar) ;
recyclerView = findViewById ( R . id. recyclerView) ;
recyclerView. setLayoutManager ( new LinearLayoutManager ( this ) ) ;
fab = findViewById ( R . id. fab) ;
}
}
AndroidX 版本
< androidx.appcompat.widget.Toolbar
android: layout_width= " match_parent"
android: layout_height= " ?attr/actionBarSize"
android: background= " ?attr/colorPrimary" />
< androidx.recyclerview.widget.RecyclerView
android: id= " @+id/recyclerView"
android: layout_width= " match_parent"
android: layout_height= " match_parent" />
< com.google.android.material.floatingactionbutton.FloatingActionButton
android: layout_width= " wrap_content"
android: layout_height= " wrap_content"
android: src= " @drawable/ic_add" />
class MainActivity : AppCompatActivity ( ) {
private lateinit var recyclerView: RecyclerView
private lateinit var fab: FloatingActionButton
override fun onCreate ( savedInstanceState: Bundle? ) {
super . onCreate ( savedInstanceState)
setContentView ( R. layout. activity_main)
val toolbar = findViewById< Toolbar> ( R. id. toolbar)
setSupportActionBar ( toolbar)
recyclerView = findViewById ( R. id. recyclerView)
recyclerView. layoutManager = LinearLayoutManager ( this )
fab = findViewById ( R. id. fab)
}
}
3.依赖配置对比
Support Library 依赖配置
// build.gradle (Module: app)
android {
compileSdkVersion 28
defaultConfig {
minSdkVersion 16
targetSdkVersion 28
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
// Support Libraries
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support:design:28.0.0'
implementation 'com.android.support:recyclerview-v7:28.0.0'
implementation 'com.android.support:cardview-v7:28.0.0'
implementation 'com.android.support:support-v4:28.0.0'
// 约束:所有 Support 库必须版本一致
// 否则会出现依赖冲突
}
AndroidX 依赖配置
// build.gradle (Module: app)
android {
compileSdkVersion 33
defaultConfig {
minSdkVersion 21
targetSdkVersion 33
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = '1.8'
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
// AndroidX Core
implementation 'androidx.core:core-ktx:1.9.0'
implementation 'androidx.appcompat:appcompat:1.6.1'
// Material Design
implementation 'com.google.android.material:material:1.8.0'
// UI Components
implementation 'androidx.recyclerview:recyclerview:1.3.0'
implementation 'androidx.cardview:cardview:1.0.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
// Lifecycle & ViewModel
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1'
implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.6.1'
// Navigation
implementation 'androidx.navigation:navigation-fragment-ktx:2.5.3'
implementation 'androidx.navigation:navigation-ui-ktx:2.5.3'
// 每个库可以独立更新版本
// 没有强制版本一致性要求
}
四、迁移指南与实践
1. 自动迁移工具
Android Studio 自动迁移
// 在 gradle.properties 中启用 AndroidX
android.useAndroidX=true
android.enableJetifier=true
迁移步骤:
备份项目 Refactor → Migrate to AndroidX 解决冲突和问题 测试所有功能
2. 手动迁移映射表
Support Library AndroidX Equivalent com.android.support:appcompat-v7 androidx.appcompat:appcompat com.android.support:design com.google.android.material:material com.android.support:recyclerview-v7 androidx.recyclerview:recyclerview com.android.support:cardview-v7 androidx.cardview:cardview com.android.support:support-v4 androidx.legacy:legacy-support-v4 android.arch.lifecycle androidx.lifecycle
3. 迁移实战示例
迁移前的 Support Library 项目
public class MainActivity extends AppCompatActivity {
private RecyclerView recyclerView;
private MyAdapter adapter;
private List < String > dataList;
@Override
protected void onCreate ( Bundle savedInstanceState) {
super . onCreate ( savedInstanceState) ;
setContentView ( R . layout. activity_main) ;
Toolbar toolbar = findViewById ( R . id. toolbar) ;
setSupportActionBar ( toolbar) ;
recyclerView = findViewById ( R . id. recycler_view) ;
recyclerView. setLayoutManager ( new LinearLayoutManager ( this ) ) ;
dataList = new ArrayList < > ( ) ;
adapter = new MyAdapter ( dataList) ;
recyclerView. setAdapter ( adapter) ;
FloatingActionButton fab = findViewById ( R . id. fab) ;
fab. setOnClickListener ( view -> {
} ) ;
}
@Override
public boolean onCreateOptionsMenu ( Menu menu) {
getMenuInflater ( ) . inflate ( R . menu. menu_main, menu) ;
return true ;
}
}
迁移后的 AndroidX 项目
class MainActivity : AppCompatActivity ( ) {
private lateinit var binding: ActivityMainBinding
private lateinit var adapter: MyAdapter
private val dataList = mutableListOf< String> ( )
override fun onCreate ( savedInstanceState: Bundle? ) {
super . onCreate ( savedInstanceState)
binding = ActivityMainBinding. inflate ( layoutInflater)
setContentView ( binding. root)
setSupportActionBar ( binding. toolbar)
setupRecyclerView ( )
setupFab ( )
}
private fun setupRecyclerView ( ) {
adapter = MyAdapter ( dataList)
binding. recyclerView. apply {
layoutManager = LinearLayoutManager ( this @MainActivity )
adapter = this @MainActivity . adapter
}
}
private fun setupFab ( ) {
binding. fab. setOnClickListener {
showSnackbar ( "FAB Clicked!" )
}
}
private fun showSnackbar ( message: String) {
Snackbar. make ( binding. root, message, Snackbar. LENGTH_SHORT) . show ( )
}
}
五、 AndroidX 新特性详解
1. KTX 扩展库
dependencies {
implementation 'androidx. core: core- ktx: 1.9 . 0 '
implementation 'androidx. fragment: fragment- ktx: 1.5 . 5 '
implementation 'androidx. lifecycle: lifecycle- runtime- ktx: 2.6 . 1 '
implementation 'androidx. lifecycle: lifecycle- viewmodel- ktx: 2.6 . 1 '
implementation 'androidx. lifecycle: lifecycle- livedata- ktx: 2.6 . 1 '
}
class MainActivity : AppCompatActivity ( ) {
private val viewModel: MainViewModel by viewModels ( )
override fun onCreate ( savedInstanceState: Bundle? ) {
super . onCreate ( savedInstanceState)
val displayName = intent. getStringExtra ( "name" ) . orEmpty ( )
viewModel. userData. observe ( this ) { user ->
updateUI ( user)
}
lifecycleScope. launch {
repeatOnLifecycle ( Lifecycle. State. STARTED) {
viewModel. uiState. collect { uiState ->
processUiState ( uiState)
}
}
}
}
private fun showDetailFragment ( itemId: String) {
supportFragmentManager. commit {
setReorderingAllowed ( true )
replace< DetailFragment> ( R. id. fragment_container,
bundleOf ( "itemId" to itemId) )
addToBackStack ( null )
}
}
}
2. Jetpack 组件集成
@Dao
interface UserDao {
@Query ( "SELECT * FROM users" )
fun getAllUsers ( ) : LiveData< List< User> >
@Insert
suspend fun insertUser ( user: User)
}
class UserRepository ( private val userDao: UserDao) {
fun getUsers ( ) : LiveData< List< User> > = userDao. getAllUsers ( )
suspend fun addUser ( user: User) = userDao. insertUser ( user)
}
class UserViewModel ( private val repository: UserRepository) : ViewModel ( ) {
val users: LiveData< List< User> > = repository. getUsers ( )
fun addUser ( user: User) {
viewModelScope. launch {
repository. addUser ( user)
}
}
}
class UserListFragment : Fragment ( ) {
private val viewModel: UserViewModel by viewModels ( )
override fun onViewCreated ( view: View, savedInstanceState: Bundle? ) {
super . onViewCreated ( view, savedInstanceState)
viewModel. users. observe ( viewLifecycleOwner) { users ->
adapter. submitList ( users)
}
}
}
六、性能优化建议
1.依赖优化配置
// build.gradle 优化配置
android {
// 启用代码压缩和资源缩减
buildTypes {
release {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
// 启用 View Binding 或 Data Binding
buildFeatures {
viewBinding true
// dataBinding true
}
}
dependencies {
// 只引入需要的组件,避免过度依赖
implementation 'androidx.appcompat:appcompat:1.6.1'
// 使用特定模块而不是整个库
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1'
implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.6.1'
// 而不是 implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
// 使用 R8 优化时 exclude 不需要的模块
implementation('com.google.android.material:material:1.8.0') {
exclude group: 'androidx.recyclerview', module: 'recyclerview'
}
}
2.组件使用最佳实践
class OptimizedActivity : AppCompatActivity ( ) {
private val viewModel: OptimizedViewModel by viewModels ( )
private var adapter: OptimizedAdapter? = null
override fun onCreate ( savedInstanceState: Bundle? ) {
super . onCreate ( savedInstanceState)
adapter = OptimizedAdapter ( )
viewModel. data. observe ( this ) { data ->
adapter? . submitList ( data )
}
}
override fun onDestroy ( ) {
super . onDestroy ( )
adapter = null
}
}
class ViewBindingActivity : AppCompatActivity ( ) {
private lateinit var binding: ActivityViewBindingBinding
override fun onCreate ( savedInstanceState: Bundle? ) {
super . onCreate ( savedInstanceState)
binding = ActivityViewBindingBinding. inflate ( layoutInflater)
setContentView ( binding. root)
binding. textView. text = "Hello AndroidX"
binding. button. setOnClickListener {
handleButtonClick ( )
}
}
}
七、 常见问题与解决方案
1.迁移后常见问题
class DependencyAnalyzer {
companion object {
fun analyzeDependencies ( ) {
}
}
}
dependencies {
implementation 'com. squareup. retrofit2: retrofit: 2.9 . 0 '
implementation 'androidx. core: core- ktx: 1.9 . 0 '
}
2.版本兼容性处理
object AndroidXVersionCompat {
fun checkCompatibility ( ) {
val appCompatVersion = "1.6.1"
val materialVersion = "1.8.0"
val lifecycleVersion = "2.6.1"
checkDeprecatedApis ( )
}
private fun checkDeprecatedApis ( ) {
}
}
class CompatUtils {
companion object {
@SuppressLint ( "ObsoleteSdkInt" )
fun setToolbarTitle ( toolbar: Toolbar, title: String) {
if ( Build. VERSION. SDK_INT >= Build. VERSION_CODES. LOLLIPOP) {
toolbar. title = title
} else {
toolbar. title = title
}
}
}
}
八、 总结对比
1.特性对比表
特性 Support Library AndroidX 包命名 com.android.support.* androidx.* 版本管理 强制统一版本 独立版本管理 维护状态 已停止更新 持续维护 KTX 支持 有限 全面支持 Jetpack 集成 部分支持 深度集成 迁移难度 - 中等(有自动化工具)
2. 使用建议
新项目 : 直接使用 AndroidX + Jetpack维护中项目 : 逐步迁移到 AndroidX遗留项目 : 评估迁移成本和收益第三方库 : 优先选择 AndroidX 版本
3. 未来趋势
Material Design 3 : 仅支持 AndroidXJetpack Compose : 基于 AndroidX新 API : 仅在 AndroidX 中提供
通过全面迁移到 AndroidX,可以获得更好的开发体验、更稳定的性能和更长期的维护支持。