如何以可以修改的方式导入 android 支持库?
How can I import android support library in a way where I can modify it?
我想 modify the ViewPager class 自己在 Android Studio 中。我目前将 support-v4 库作为库依赖项,但我知道 Android Studio 不允许直接编辑外部库。
尝试 1:
我尝试在项目中的 java.android.support.v4.view 包中复制粘贴 ViewPager。当我修改和测试它时,它似乎没有工作,因为它显示的是 ViewPager 的标准功能,而不是修改后的功能。
尝试 2: 我试图将其包名更改为 com.example.view 以区别于支持库。它运行不佳,因为 ViewPager 的某些功能依赖于其正确的包名称,这导致了一些错误,例如 ClassCastException。
尝试 3: 我试图将 ViewPager 放入一个名为 "lib" 的新添加模块中,我将其包含在 settings.gradle 中并添加为依赖项对于我的 "app" 模块。好像也没用。
我没有尝试过的是摆脱 support-v4 gradle 依赖项,而是将整个源代码复制粘贴到我的项目中。这有点多,我不想这样做,因为我想保持 support-v4 库是最新的,同时只覆盖 ViewPager class。 (我也不确定如何获得最新版本的源代码。我听说他们只开源每个主要 API 版本。)
我可以从这里做什么?提前致谢。
What can I do from here?
重做尝试 2。在需要的地方,将其他 classes(例如,PagerAdapter
)复制到您的 com.example.view
包中,并切换您的应用程序代码以引用那些 classes。基本上,您正在分叉 ViewPager
,这可能需要您分叉的不仅仅是那个 class。
请注意,其他需要真实 ViewPager
的代码(例如指标)将无法与您的分叉一起使用,它们本身需要分叉。
您可能希望考虑是否可以通过简单的 subclass 来处理您的更改。
I know that Android Studio does not allow to directly edit external libraries
此外,正如您稍后在问题中指出的那样,如果您修改了库,则每当该库发生更改时,您都必须重新应用这些修改。
Also I'm not sure how to get the latest version of the source code
Java 在您的硬盘上,在 Android 存储库中。查找 ...sources.jar
文件。
一般来说,修改第三方库不是一个好主意,除非你真的知道自己在做什么。您可以在不了解所有 class 和方法依赖性的情况下轻松破坏所有内容。
一个很好的替代方案是封装或继承。两者都是有根据的面向对象原则。通过封装,您可以创建一个类型为 ViewPager 的成员字段,并根据需要委托对它的方法调用。通过继承,您可以扩展 ViewPager 并覆盖您希望提供不同行为的任何方法。很可能继承是最适合您的解决方案,这样您就可以在通常使用 ViewPager 的任何地方使用新的 class。
我想 modify the ViewPager class 自己在 Android Studio 中。我目前将 support-v4 库作为库依赖项,但我知道 Android Studio 不允许直接编辑外部库。
尝试 1: 我尝试在项目中的 java.android.support.v4.view 包中复制粘贴 ViewPager。当我修改和测试它时,它似乎没有工作,因为它显示的是 ViewPager 的标准功能,而不是修改后的功能。
尝试 2: 我试图将其包名更改为 com.example.view 以区别于支持库。它运行不佳,因为 ViewPager 的某些功能依赖于其正确的包名称,这导致了一些错误,例如 ClassCastException。
尝试 3: 我试图将 ViewPager 放入一个名为 "lib" 的新添加模块中,我将其包含在 settings.gradle 中并添加为依赖项对于我的 "app" 模块。好像也没用。
我没有尝试过的是摆脱 support-v4 gradle 依赖项,而是将整个源代码复制粘贴到我的项目中。这有点多,我不想这样做,因为我想保持 support-v4 库是最新的,同时只覆盖 ViewPager class。 (我也不确定如何获得最新版本的源代码。我听说他们只开源每个主要 API 版本。)
我可以从这里做什么?提前致谢。
What can I do from here?
重做尝试 2。在需要的地方,将其他 classes(例如,PagerAdapter
)复制到您的 com.example.view
包中,并切换您的应用程序代码以引用那些 classes。基本上,您正在分叉 ViewPager
,这可能需要您分叉的不仅仅是那个 class。
请注意,其他需要真实 ViewPager
的代码(例如指标)将无法与您的分叉一起使用,它们本身需要分叉。
您可能希望考虑是否可以通过简单的 subclass 来处理您的更改。
I know that Android Studio does not allow to directly edit external libraries
此外,正如您稍后在问题中指出的那样,如果您修改了库,则每当该库发生更改时,您都必须重新应用这些修改。
Also I'm not sure how to get the latest version of the source code
Java 在您的硬盘上,在 Android 存储库中。查找 ...sources.jar
文件。
一般来说,修改第三方库不是一个好主意,除非你真的知道自己在做什么。您可以在不了解所有 class 和方法依赖性的情况下轻松破坏所有内容。
一个很好的替代方案是封装或继承。两者都是有根据的面向对象原则。通过封装,您可以创建一个类型为 ViewPager 的成员字段,并根据需要委托对它的方法调用。通过继承,您可以扩展 ViewPager 并覆盖您希望提供不同行为的任何方法。很可能继承是最适合您的解决方案,这样您就可以在通常使用 ViewPager 的任何地方使用新的 class。