What is Support Library ?
The Android Support Library package is a set of code libraries that provide backward-compatible versions of Android framework APIs as well as features that are only available through the library APIs. Each Support Library is backward-compatible to a specific Android API level.What is AndroidX?
AndroidX is the open-source project that the Android team uses to develop, test, package, version and release libraries within Jetpack.
Like the Support Library, AndroidX ships separately from the Android OS and provides backwards-compatibility across Android releases .
Need of AndroidX
- The Organic growth of the library has become confusing .
- There are Components and packages named "v7" when the minimal SDK level we support is 14 .
- Weired packing name diffcult to change and confusing hard to change .
Writing Android apps means depending on two kinds of classes ( android.* vs androidx.* namespaces )
- Classes like PackageManager, which are bundled with the operating system and can have different APIs and behavior for different Android versions
- Classes like AppCompatActivity or ViewModel, which are unbundled from the operating system and ship in your apk. These libraries are written to provide a single API surface with behavior that's as consistent as possible across Android versions.
Bundled libraries : bundled with OS can have different API and behavior.
UnBundled libraries : (androidx.) unbundled from OS and ships in your apk.
UnBundled libraries : (androidx.) unbundled from OS and ships in your apk.
AndroidX uses Semantic-version
Previously, support libraryuse SDK version but AndroidX use the Semantic-version. It’s going to re-version from 28.0.0 → 1.0.0.
Generally, you can expect the following mapping from old to new packages:
Support Library Components have been moved under androidx and their package name simplified .
OLD
|
New
|
android.support.** | androidx.@ |
android.databinding.** | androidx.databinding.@ |
android.design.** | com.google.android.material.@ |
The Architecture Components libraries have also been moved under androidx and their package names simplified .
OLD
|
New
|
android.arch.** | androidx.@ |
android.arch.persistence.room.** | androidx.room.@ |
android.arch.persistence.** | androidx.sqlite.@ |
Complete Mapping : https://developer.android.com/jetpack/androidx/migrate#class_mappings
How to migrate current project to androidx
In Android Studio 3.2 (September 2018), there is direct option to migrate existing project to AndroidX
Android Studio > Refactor Menu > Migrate to AndroidX. It will analysis and will open Refractor window in bottom. Accept changes to be done.
Below two flags gets added to gradle.properties file .
android.enableJetifier=true
android.useAndroidX=true
Below are the Changes Before and After Migrating Sample App To AndroidX .
build.gradle
Before :
dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'com.android.support:appcompat-v7:28.0.0' implementation 'com.android.support.constraint:constraint-layout:1.1.3' testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.2' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' }
After :
dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'androidx.appcompat:appcompat:1.0.0-beta01' implementation 'androidx.constraintlayout:constraintlayout:1.1.3' testImplementation 'junit:junit:4.12' androidTestImplementation 'androidx.test:runner:1.1.0-alpha4' androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha4' }
XML Layout
Before :
<?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" /> </android.support.constraint.ConstraintLayout>
After :
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout>
Imports
Before :
package com.tutorialsbuzz.androidsupport; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } }
After :
package com.tutorialsbuzz.androidsupport; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } }
No comments:
Post a Comment