
Google I / O 2018引入了现有支持库的替代品-AndroidX
最初,支持库旨在为新API的向后兼容而设计,并且与操作系统密切相关。 支持库是在内部分支机构中开发的,并定期合并到Android开放源代码项目(AOSP)中。 当AOSP代码和内部Google代码同步时,这种方法将社区的合并请求限制在很小的时间内。 此外,要使用支持库,必须抽出所有平台代码,这是40GB以上的源代码。 对于我的250 GB驱动器,这是很多。
支持库的当前功能比最初的想法要广泛得多。 例如,实现了一个用于简化AppCompat用户界面开发的组件,一个用于处理Room数据库的组件,一个用于后台WorkManager任务的组件。 这些库中的许多库最初都是向后兼容的,并且与Android API松散地联系在一起。 支持库编号中的数字表示它支持的最低API级别。 例如,support-v7支持Android API版本7和更高版本。 但是,从版本26.0.0开始,支持库支持Android API 14及更高版本。 另一个麻烦是需要同时更新所有支持库。 所有这些表明,支持库已经过时,需要重新考虑。
开发团队花了几年的时间将支持库隔离到一个单独的小项目中,您可以使用Android Studio和Gradle对其进行处理。 开发已移至另一个分支,该分支最近已公开。 更新的库称为AndroidX。 新库之间的另一个重要区别是独立更新的可能性。 Google承诺在一个主要版本的框架中具有二进制兼容性,这将允许在同一项目中使用recyclerview版本1.0和AppCompat版本1.9。
我认为,这是支持库开发中正确而合乎逻辑的步骤。 我不得不多次严重地从支持库中自定义组件,这导致需要在我的项目中创建com.android.support程序包...以访问程序包专用的类/方法/字段。
现在,我建议与我一起“破解” AndroidX家族的某些库。 作为教程,我选择了CardView。 我将在不对使用它的代码进行任何更改的情况下影响CardView的行为。
我们需要:一台运行Linux或MacOS(不支持Windows)的计算机,Android SDK,以及可选的Android Studio(我使用的是3.1.3版)
窗户呢?要下载源,建议使用repo实用程序,该实用程序不适用于Windows。 例如,也可以使用git下载源: git clone --single-branch -b androidx-master-dev https://android.googlesource.com/platform/frameworks/support
但是,在这种情况下,它们不会实用程序和编译的依赖项已下载。 我没有检查建造的重要性
首先,我使用AndroidX准备了一个小示例 。
重点:
使用AndroidX
def cardViewVer = '1.0.0-beta01' dependencies { implementation "androidx.cardview:cardview:$cardViewVer" }
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <androidx.cardview.widget.CardView android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginBottom="32dp" android:layout_marginEnd="32dp" android:layout_marginLeft="32dp" android:layout_marginRight="32dp" android:layout_marginStart="32dp" android:layout_marginTop="32dp"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" /> </androidx.cardview.widget.CardView> </FrameLayout>
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } }
结果,我们得到以下应用程序:

让我们开始谈谈AndroidX
首先,您需要安装repo实用程序,该实用程序的创建是为了简化android环境下git的工作。
尽管您也可以使用主目录,但我们为操作创建了一个工作文件夹。
mkdir androidX
安装实用程序
d androidX mkdir bin curl https://storage.googleapis.com/git-repo-downloads/repo > ./bin/repo chmod a+x ./bin/repo PATH={some_path}/androidX/bin/:$PATH
让我解释一下我们刚刚做了什么:
在androidX文件夹中,我们创建了repo文件夹,在该文件夹中下载了文件https://storage.googleapis.com/git-repo-downloads/repo ,使该文件可执行,并将bin文件夹添加到PATH中,作为当前终端会话的一部分。
就我而言,最后一个命令如下所示:PATH =〜/ Work / projects / androidX / bin /:$ PATH
下载源AndroidX:
创建文件夹androidX / androidX-source并将其设为最新
mkdir androidX-source cd androidX-source
我们初始化本地存储库。 它下载有关存储库中现有分支的大约16兆字节的数据。
repo init -u https://android.googlesource.com/platform/manifest -b androidx-master-dev
在此过程中,用户名和邮件将从全局演出配置中提取,在我的情况下,它看起来像这样:
Your identity is: Andrew <me@example.com> If you want to change this, please re-run 'repo init' with --config-name , . . Testing colorized output (for 'repo diff', 'repo status'): black red green yellow blue magenta cyan white bold dim ul reverse Enable color display in this user account (y/N)?
我对最后一个问题的回答是肯定的。
最后我们收到一条消息
repo has been initialized in /Users/{user}/Work/projects/androidX/androidX-source
接下来,直接下载源代码(大约3 GB)
repo sync -j8 -c
我们可以在Android Studio或任何其他编辑器中打开下载的源。 gradle项目的根文件夹位于: androidX/androidX-source/frameworks/support/
有许多具有不同功能的模块和一些测试应用程序。 我们可以组装并安装它们以检查性能。
在cardview模块中打开androidx.cardview.widget.RoundRectRrawDrawable类
在onDraw方法中添加一个无害的笑话
canvas.drawText(“Hacked!”, 100, 100, paint);
完整补丁
对于项目,描述了createArchive gradle任务,该任务将收集androidX库并将其放置在本地maven存储库中。 仓库地址: androidX/androidX-source/out/host/gradle/frameworks/support/build/support_repo
要使用它,必须在根构建文件中指定路径。
maven { url 'androidX/androidX-source/out/host/gradle/frameworks/support/build/support_repo' }
请注意,汇编版本可能比Google存储库中的更新。 在撰写本文时,我已经编译了androidX库版本1.0.0-rc01。 您可以在本地Maven存储库中查看已编译库的版本: androidX/androidX-source/out/host/gradle/frameworks/support/build/support_repo/androidx/cardview/cardview/maven-metadata.xml
更新的例子
我们将重建我们的应用程序,并看到下图:

AndroidX成功修补!
这给我们带来了什么?
- 我们可以解决重大问题,而无需等待Google的更新。 顺便说一下,AndroidX团队接受请求请求。
- 强烈自定义androidX库。
相关链接:
支持库文档
开发人员博客文章
AndroidX贡献指南
AndroidX任务跟踪器
AndroidX来源