jjzjj

Android O 预览版 : ConnectivityManager removed methods are not backward compatible

coder 2023-12-03 原文

先决条件和构建配置:我正在尝试通过为 Android O perview 设备设置以下构建配置参数来使用 AndroidStudio 2.4 review 5 构建我的应用程序, compileSdkVersion 'android-O' buildToolsVersion '25.0.0' compileOptions.encoding = 'ISO-8859-1' minSdkVersion 16 targetSdkVersion 'O' //启用 multidex 支持。 multiDexEnabled 真

问题描述:我的应用程序使用以下这些已弃用的 ConnectivityManager 类方法用于旧版 android 设备。 -ConnectivityManager.startUsingNetworkFeature() - ConnectivityManager.stopUsingNetworkFeature() - ConnectivityManager.requestRouteToHost()

当我尝试构建具有上述 api 的应用程序时,它会出现如下编译时错误,

错误:(626, 48) 错误:找不到符号方法 startUsingNetworkFeature(int,String) 错误:(7393, 27) 错误:找不到符号方法 stopUsingNetworkFeature(int,String) Error:(69, 36) 错误:找不到符号方法requestRouteToHost(int,int)

理想情况下,为了向后兼容,这些 api 不应给出编译时错误。 请让我知道如何解决这些编译时错误。

我无法从代码中删除这些方法,因为它们对于具有较旧 android 版本(低于 Android L 版本)的设备是必需的

最佳答案

在您的项目中创建一个新的 android 库 模块。确保此库具有 compileSdkVersion 25。然后将以下类放入库中:

@SuppressWarnings("Deprecation")
public class NetworkFeaturesCompat {
    public static NetworkFeaturesCompat from(final ConnectivityManager cm) {
        return new NetworkFeaturesCompat(cm);
    }

    private final ConnectivityManager mConnectivityManager;

    private NetworkFeaturesCompat(final ConnectivityManager cm) {
        mConnectivityManager = cm;
    }

    public int startUsingNetworkFeature(final int networkType, final String feature) {
        return mConnectivityManager.startUsingNetworkFeature(networkType, feature);
    }

    public int stopUsingNetworkFeature(final int networkType, final String feature) {
        return mConnectivityManager.stopUsingNetworkFeature(networkType, feature);
    }

    public boolean requestRouteToHost(final int networkType, final int hostAddress) {
        return mConnectivityManager.requestRouteToHost(networkType, hostAddress);
    }
}

现在通过改变它的 build.gradle 文件让你的主模块依赖这个库:

dependencies {
    compile project(":your-new-library-module-name")
}

构建您的项目。

现在您可以在您的主项目中使用这个辅助类。

您可能需要将此添加到您的混淆器规则中(我还没有实际测试过这一点):

-dontwarn android.net.ConnectivityManager

请注意,此方法在 Android 6+ 上仍会抛出 UnsupportedOperationException

为什么这有效?

原始方法仍然存在于 SDK 中,它们只是对 SDK 26 中的公共(public) API 隐藏了。这就是它不会在运行时崩溃的原因。

库模块是针对 SDK 25 编译的,其中方法仍然是公共(public) API 的一部分。这就是它在编译时不会崩溃的原因。

由于整个项目是针对 SDK 26 proguard 编译的,因此可能会提示缺少方法。在那种情况下,请忽略投诉。

关于Android O 预览版 : ConnectivityManager removed methods are not backward compatible,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43365391/

有关Android O 预览版 : ConnectivityManager removed methods are not backward compatible的更多相关文章

  1. ruby-on-rails - Rake 预览在 Octopress 中不起作用 - 2

    我在我的机器上安装了ruby​​版本1.9.3,并且正在为我的个人网站开发一个octopress项目。我为我的gems使用了rvm,并遵循了octopress.org记录的所有步骤。但是我在我的rake服务器中发现了一些错误。这是我的命令日志。Tin-Aung-Linn:octopresstal$ruby--versionruby1.9.3p448(2013-06-27revision41675)[x86_64-darwin12.4.0]Tin-Aung-Linn:octopresstal$rakegenerate##GeneratingSitewithJekyllidenticals

  2. ruby - Octopress 错误 - rake 预览、观察或生成 - 2

    我遵循了OctopressDocumentation中的所有说明:sddhrthrt@thinkpad:~/octopress$rakegenerate##GeneratingSitewithJekylldirectorysource/stylesheets/createsource/stylesheets/screen.cssConfigurationfrom/home/sddhrthrt/octopress/_config.yml/home/sddhrthrt/octopress/plugins/pygments_code.rb:5:warning:alreadyinitializ

  3. ruby-on-rails - Rails 4.1 Mailer 预览和设计自定义电子邮件 - 2

    我有一个全新的Rails4.1.1应用程序,我正在其中自定义Devise电子邮件。我想让它们显示在新的Rails电子邮件预览功能中,所以我执行了以下操作:1)将以下片段添加到我的config/development.rb文件中:config.action_mailer.preview_path="#{Rails.root}/lib/mailer_previews"2)在app/mailers/user_mailer.rb中创建我的自定义Devise电子邮件UserMailer:classUserMailer3)更改了config/initializers/devise.rb以包含以下片

  4. javascript - 将 WMD 编辑器的预览 HTML 与服务器端 HTML 验证对齐(例如,没有嵌入的 JavaScript 代码) - 2

    关于如何对WMD编辑器生成的Markdown进行服务器端清理以确保生成的HTML不包含恶意脚本,如下所示:但我也没有找到堵住客户端漏洞的好方法。当然,客户端验证不能替代服务器上的清理验证,因为任何人都可以假装是客户端并向您发送令人讨厌的Markdown。而且,如果您在服务器上删除HTML,攻击者将无法保存错误的HTML,这样其他人以后就无法看到它,并且他们的cookie被盗或session被错误的脚本劫持。因此,有一个有效的案例表明,在WMD预览Pane中执行无脚本规则可能也不值得。但想象一下,攻击者找到了一种将恶意Markdown放到服务器上的方法(例如,来自另一个站点的受损提要,或

  5. javascript - GWT - ListBox,如何预览 changeEvent - 2

    我正在努力实现一个ListBox,我希望能够在用户在ListBox中进行选择时提醒他们。有没有办法响应用户单击列表框中的项目,并在“changeEvent”发生之前响应选择,这样我就可以防止changeEvent被触发。我试过使用Event.addNativePreviewHandler(newNativePreviewHandler(){@OverridepublicvoidonPreviewNativeEvent(NativePreviewEventevent){System.out.println("EVENT:"+event.getTypeInt());}});但这从不响应单击

  6. javascript - 如何在 jquery/javascript 中跳过浏览器默认打印预览​​并将内容直接打印到打印机? - 2

    因为,我们知道在C#windows窗体应用程序中,我们可以直接打印内容进行打印,而无需任何预览。当用户单击按钮时,我想在jQuery/JavaScript中打印内容,浏览器不显示任何打印预览和打印到打印机的内容。我也遇到了同样的问题。 最佳答案 经过数小时的研究,我找到了以下解决方案来解决我的问题。或许您可以使用GoogleCloundPrint设置您的打印机,然后使用云打印API以静默方式向它们提交作业。看起来您可以在提交作业时指定打印机ID。您可能需要使用html2canvas之类的工具来栅格化网页。在这里找到Selectapr

  7. javascript - jQuery 图像预览 exif 旋转问题 - 2

    我正在使用这个jQuery函数在上传之前显示图像。图片是从移动设备上传的,exif方向有问题。该函数只是将预览图片的src换成实际文件图片的base64编码。在服务器端(php),我正在使用一个函数来更正上传时的exif旋转。我可以在jQuery中制作与我的PHP代码类似的东西吗?这样我就可以在上传之前以正确的旋转显示图像?JavascriptfunctionreadURL(input){if(input.files&&input.files[0]){varreader=newFileReader();reader.onload=function(e){$('#blah').attr(

  8. javascript - 谷歌浏览器打印预览第一次不加载页面 - 2

    我正在尝试使用此代码打印页面functionPopup(){varmywindow=window.open('','Ticketinfo','height=400,width=600');mywindow.document.write('mydiv');mywindow.document.write('*{margin:0;padding:0;}body{padding:3px;padding-left:20px;font:6pxboldArial;}');mywindow.document.write('');mywindow.document.write('');mywindow.

  9. javascript - 将图像 base64 发布到服务器并将图像保存到磁盘相同的文件上传,在浏览器中预览 - 2

    我正在使用this并进行图像预览。当我运行它时,没关系。它由inputtype="file"工作,并在浏览器上显示基于base64的图像。html代码:CSS代码:#imagePreview{width:160px;height:120px;border:1pxsolid;float:right;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale);}javascript代码:varloadImageFile=(function(){if(window.FileReader){varo

  10. javascript - 图像上传部分中的跨浏览器图像预览在 ie8 中不起作用 - 2

    我网站上传图像部分的图像预览在IE8+浏览器中不工作。但在IE7和IE6中工作正常。我正在使用下面的代码来实现图像预览功能。JS:varloadImageFile=(function(){if(window.FileReader){varoPreviewImg=null,oFReader=newwindow.FileReader(),rFilter=/^(?:image\/bmp|image\/cis\-cod|image\/gif|image\/ief|image\/jpeg|image\/jpeg|image\/jpeg|image\/pipeg|image\/png|image\

随机推荐