专栏首页老欧说安卓Android Studio 2.3的各种新增疑难杂症

Android Studio 2.3的各种新增疑难杂症

3月初谷歌发布了Android Studio 2.3,博主这一阵认真用2.3把之前的项目重编了一下,发现了不少兼容性问题,于是决定开个贴记录一下这些疑难杂症。 一、首先是升级完毕之后,原来的项目居然编译不过了,原因是Android Studio 2.3与其自带的Gradle闹矛盾,需要把Gradle升级到3.3并做一系列的配置调整才行,具体操作步骤详见博文《Android Studio升级到2.3的编译问题解决办法》。 二、在管理WIFI或者热点操作时,原本都要先调用以下代码获取WifiManager的实例:

WifiManager mWifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);

但是在Android Studio 2.3中提示该行代码编译失败,失败描述为“Error:Error: The WIFI_SERVICE must be looked up on the Application context or memory will leak on devices < Android N. Try changing  to .getApplicationContext()  [WifiManagerLeak]”, 这句话的大意是,无线网络服务WIFI_SERVICE必须由Application的上下文去获取,否则的话,在7.0以下的设备中会发生内存泄漏。所以要在getSystemService方法之前加上“getApplicationContext()”,代码举例如下:

WifiManager mWifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);

三、把编译好的工程导出apk安装包,前几个弹窗没什么变化,可是最后一个窗口突然增加了几个复选框,如下图所示:

光看字面意思,左边复选框的意思是给jar包签名,右边复选框的意思是给apk签名“V2 (Full APK Signature)”,所以本人毫不犹豫地勾选了右边的复选框。没想到最后生成的apk,却无法在大多数手机上安装,只能在Android7.0上安装。查了很久才发现,正确的做法是勾选左边的复选框“V1 (Jar Signature)”,然后才能导出可以正常安装的apk。 需要注意的是,如果不是通过菜单导出apk,而是通过命令行导出apk,那么需要修改模块的build.gradle,在里面的“signingConfigs”——“release”节点下面增加一行“v2SigningEnabled false”,表示关闭V2的签名操作。举例如下:

  signingConfigs {
   release {
    storeFile file("release.keystore")
    storePassword "password"
    keyAlias "release"
    keyPassword "password"
    v2SigningEnabled false
   }
  }

点此查看Android开发笔记的完整目录

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 《Android Studio开发实战 从零基础到App上线(第2版)》资源下载和内容勘误

    下面是《Android Studio开发实战 从零基础到App上线(第2版)》一书用到的工具和代码资源: 1、本书使用的Android Studio版本为3....

    用户4464237
  • Kotlin入门(13)类成员的众生相

    上一篇文章介绍了类的简单定义及其构造方式,当时为了方便观察演示结果,在示例代码的构造函数中直接调用toast提示方法,但实际开...

    用户4464237
  • Android5.0和6.0之后新增的控件说明

    Android自5.0后增加了不少新控件,帮助开发者实现了更酷更炫的UI效果。可是对于初学者来说,这些新控件的用法不像老控件那...

    用户4464237
  • 「 Android开发 」开启第一个App应用

    最近玩了下Android,但遇到了一些坑,浪费了很多的时间,在此记录一下,你若是遇到了就知道怎么解决了 PS:建议使用电脑网页打开,图片较多

    KEN DO EVERTHING
  • Swift:内存管理和值类型的性能

    在您iOS生涯中很可能至少问过自己一次,struct和class之间有什么区别? 实际上,在使用一个或另一个之间的选择总是归结为值语义和引用语义,但是两者之间的...

    韦弦zhy
  • 11、backbone实例todos扩展+web服务器

    在第7节的时候,我们对backbone的功能进行了分析,建立了web端的model。在本节中我们将对原先的todos进行扩展,使其能够将数据存到server端的...

    the5fire
  • [第29期] 熟悉链表的几个经典题目- #141,#142, #19

    昨天我们回顾了 链表的一些基础操作, 今天我们一起来看下几道链表的经典题目, 来巩固对链表的认识和理解。

    用户6900878
  • web使用 Weinre 调试移动网站及 PhoneGap 应用

    在 PC 端,我们可以使用 Firebug 或者 Chrome 开发人员工具方便的调试网站或者 Web 应用。但是,当我们想在移动端调试站点或者应用的时候,这些...

    用户4962466
  • python 安装zbar

    py3study
  • python构建SSH僵尸网络

    构建僵尸网络,主要使用的包为pexpect,Pexpect 是一个用来启动子程序并对其进行自动控制的 Python 模块,它可以用来和像 ssh、ftp、pas...

    黑白格

扫码关注云+社区

领取腾讯云代金券