首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Robolectric 4.3.1失败并显示消息: Android 29需要Java 9 (have Java 1)

Robolectric是一个用于Android应用程序的单元测试框架,它可以在JVM上运行Android代码,而无需依赖于设备或模拟器。它提供了一个模拟的Android环境,使开发人员能够快速、可靠地运行单元测试。

根据您提供的问题,Robolectric 4.3.1失败并显示消息"Android 29需要Java 9 (have Java 1)",这是因为Robolectric 4.3.1版本需要Java 9或更高版本来运行Android 29及以上的API级别。然而,您当前的Java版本为Java 1,不符合要求。

为了解决这个问题,您可以采取以下步骤:

  1. 升级Java版本:您需要升级您的Java版本至Java 9或更高版本。您可以从Oracle官方网站或OpenJDK项目中下载并安装最新的Java版本。
  2. 配置Java环境变量:确保您的计算机已正确配置Java环境变量。您可以在操作系统的环境变量中设置JAVA_HOME和PATH变量,以便系统能够找到并使用正确的Java版本。
  3. 更新Robolectric版本:检查是否有适用于您当前Java版本的Robolectric版本。您可以查看Robolectric的官方文档或GitHub页面,了解哪个版本与您的Java版本兼容。
  4. 更新项目配置:如果您使用的是构建工具(如Gradle或Maven),请确保您的项目配置文件中指定了正确的Robolectric版本和Java版本。

总结起来,要解决Robolectric 4.3.1失败并显示消息"Android 29需要Java 9 (have Java 1)"的问题,您需要升级Java版本至Java 9或更高版本,并确保Robolectric版本与您的Java版本兼容。这样,您就可以成功运行Robolectric测试并进行Android开发的单元测试了。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云计算服务:https://cloud.tencent.com/product/cvm
  • 腾讯云数据库服务:https://cloud.tencent.com/product/cdb
  • 腾讯云人工智能服务:https://cloud.tencent.com/product/ai
  • 腾讯云物联网服务:https://cloud.tencent.com/product/iotexplorer
  • 腾讯云移动开发服务:https://cloud.tencent.com/product/mobdev
  • 腾讯云存储服务:https://cloud.tencent.com/product/cos
  • 腾讯云区块链服务:https://cloud.tencent.com/product/baas
  • 腾讯云元宇宙服务:https://cloud.tencent.com/product/vr
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【测试左移专栏】用 Powermock 和 Mockito 来做安卓单元测试

测试方式:以正常小QA的测试思维方法,就可以来定义这一层的测试方式,测试过程中需要真机或模拟器,做真实的操作。...2、源码和其他工程目录搬迁移植 将源码目录全部放在src/main/java下(适合老业务改造)。 如果源码目录指定不对,需要修改build.Gradle的sourceSets配置。...1、选取合适的测试框架 作者开始在业务中尝试使用Robolectric测试框架,初心主要在于他的特性: Robolectric Test-Drive Your Android Code Running...Robolectric首次启动下载maven相关的依赖失败。...即使我们在开发网下设置了代理,开通外网权限,首次启动还会去下载相关依赖,结果是下载失败,这个是由于Robolectric本身代码里的逻辑,我们不能通过网络代理的方式解决。

4.1K00
  • 移动APP自动化测试框架对比

    Android自动化框架 1、Instrumentation https://developer.android.com/reference/android/app/Instrumentation.html...跨平台开发支持(同样的代码在Android和iOS设备中都适用)。 缺点:测试步骤失败后,将跳过所有的后续步骤,这可能会导致错过更严重的产品问题。测试耗费时间,因为它总是默认先安装app。...8、Robolectric http://robolectric.org/ Robolectric是一款Android单元测试框架,但它并不依赖于Android提供的测试功能,它通过实现一套JVM能运行的...9、RoboSpock http://robospock.org/ RoboSpock是一个开源的Android测试框架,它提供了简单的编写BDD行为驱动开发规范的方法,使用Groovy语言,支持Google...(2)依赖屏幕截图,使得 1)在不同平台,不同分辨率,不同操作系统上需要维护一套图形源文件,不利于跨平台移植; 2)若出现程序逻辑外的界面遮挡,则影响程序执行。

    4.1K20

    Android 平台实现 CI

    在CI的Compilation阶段,若出现编译失败频率较高,一是因为代码未按照原子提交的原则进行,二是本地开发环境不干净,存在与CI环境不一致的地方,导致每次提交时不能提交所有文件,总是需要手动挑选提交文件...步骤 1:持续构建 持续构建的目的是随时可自动化生成最新的可运行的App。虽然有这么多限定词来表示这一步完成的验证条件,但事实上只需要经过三个步骤即可完成。...这时可以采用Robolectric单元测试框架,这将大幅度提升单元测试覆盖率,且理论上可以达到100%。Robolectric是以JUnit为核心,完成了对Android SDK的stub。...采用stub的方式后,Android的组件在JVM中即可创建运行,无需在Android平台下运行。这也意味着在Android开发中可以采用TDD的方式,进一步提高单元测试覆盖率。...使得QA也能轻松的实现Function Test 利用Calabash提供的对App组件操作的API,实现启动App登陆只需要以下短短的几行代码: Given /^I launch and login

    1.8K90

    【Dev Club 分享】安卓单元测试:What, Why and How

    http://chriszou.com/2016/04/29/android-unit-testing-mockito.html 2.5 在测试环境中使用Mock:依赖注入 接下来的一个问题就是...用一定的架构,比如MVP等等,将安卓相关的代码隔离开了,中间的Presenter或Model是纯java实现的,可以在JVM上面测试。View和其他android相关的代码则不测。...刚开始,我采用的是Robolectric,原因有两个:1. 我们项目当时还没有比较清楚的架构,android跟纯java代码的隔离没有做好;2....很多安卓相关的代码,还是需要测试的,比如说自定义View等等。 然而慢慢的,我的态度从拥抱Robolectric,到尽量不用它,尽量使用纯java代码去实现。...但毕竟它也需要merge一些资源,build出来一个模拟的app,因此相对于纯java和JUnit来说,这个速度依然是很慢的。

    1.4K60

    Android单元测试框架Robolectric3.0(一):入门篇

    作者博客 http://www.jianshu.com/u/9fa7fc2f3733 源码地址 https://github.com/geniusmart/LoveUT 由于 Robolectric 3.0...对于Android app来说,写起单元测试来瞻前顾后,一方面单元测试需要运行在模拟器上或者真机上,麻烦而且缓慢,另一方面,一些依赖Android SDK的对象(如Activity,TextView等)...Android Studio的配置 1.在Build Variants面板中,将Test Artifact切换成Unit Tests模式(注:新版本的as已经不需要做这项配置),如下图: ?...更多环境配置可以参考官方网站(http://robolectric.org/getting-started/)。 3 Activity的测试 1.创建Activity实例 ? 2.生命周期 ?...当然,Intent 有很多属性,如果需要分别断言的话比较麻烦,因此可以用一些第三方库,比如 assertj-android (https://github.com/square/assertj-android

    2.2K30

    Android单元测试框架Robolectric3.0(二):数据篇

    作者博客 http://www.jianshu.com/u/9fa7fc2f3733 源码地址 https://github.com/geniusmart/LoveUT 由于 Robolectric...如果你写UT,使用Robolectric这样的框架,你不仅可以脱离Android环境对代码进行调试,还可以很快速的定位和Debug你想要调试的代码,大大的提升了开发效率。...模拟网络请求 对于网络请求的测试,我们需要知道确切的响应结果值,才可进行一系列相关的业务功能的断言(比如请求成功/失败后的异步回调函数里的逻辑),而发送真实的网络请求时,其返回结果往往是不可控的,因此对网络请求和响应结果进行模拟显得特别必要...这样做的话要改变一些编码习惯,比如回调函数不能写成匿名内部类对象,需要定义一个全局变量,破坏其封装性,即提供一个get方法,供UT调用。...1.不使用任何框架的DB测试(SQLiteOpenHelper) 如果没有使用框架,采用Android的SQLiteOpenHelper对数据库进行操作,通常我们会封装好各个Dao,实例化一个SQLiteOpenHelper

    1.3K20

    使用AsyncTask异步更新UI界面及原理分析

    AsyncTask的内部实现是一个线程池,所有提交的异步任务都会在这个线程池中的工作线程内执行,当工作线程需要跟UI线程交互时,工作线程会通过向在UI线程创建的Handler传递消息的方式,调用相关的回调函数...AsyncTask并不总是需要使用上面的全部3种类型。标识不使用的类型很简单,只需要使用Void类型即可。 例子:从网络上下载图片,下载完成后在UI界面上显示出来,并会模拟下载进度更新。...前面我们说到,当任务的状态发生改变时(1、执行成功2、取消执行3、进度更新),工作线程会向UI线程的Handler传递消息,Handler要处理其他线程传递过来的消息。...在AsyncTask中,InternalHandler是在UI线程上创建的,它接收来自工作线程的消息,实现代码如下: AsyncTask.java 1 private static class InternalHandler...,调用相关的回调函数

    1.4K110

    Android项目开发全程(三)-- 项目的前期搭建、网络请求封装是怎样实现的

    不过不影响参考思路) 一、首先创建工程,工程名:LaughDemo(在博文:《Android项目开发全程(一)--创建工程》中有介绍)   1、布局文件很简单,只有一个TextView用来显示获取的json...1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http:/...由图分析: 1、程序启动后会调用getLaughBy360()方法做网络请求。 2、同时会通过mHandler.sendEmptyMessage()发送消息显示加载对话框。...3、请求成功后回调onCallBackSuccessed(),获取json字符串隐藏加载对话框。 4、最后一步匹配请求码,显示json字符串。...现在获取到的json字符看起来像是一顿乱码,这正是我们想要的,我们后续要做的工作就是解析这些“乱码”,然后让它们有规则的显示到listview中,等整个项目完成后本人会把代码上传附上下载链接(现在还没完成暂不能上传

    99400

    Android系统推送Hook实战

    应用服务端告诉小米统一推送服务,他需要向某个指定账号、指定类型、或指定设备推送消息。 小米统一的服务端通过与手机上的 MiPush SDK 的长连接,向手机推送数据,展示在通知栏中。.../Jadx/MiuiSystemUI.vdex [INFO] 1 out of 1 Vdex files have been processed [INFO] 1 Dex files have been...代码结构 对源码经过简单阅读,再辅以 objection 和 frida 的 Java.choose() 方法动态调试后发现存储通知栏消息的地方主要是在 com.android.systemui.statusbar.phone.NotificationGroupManager...} 由于 java 编译器的关系,在运行时需要加上 -noverify 的参数,否则会报 java.lang.VerifyError 的错。...要清理也很简单,在每次拉取消息结束后,调用一下命令即可: $ adb shell su -c 'service call notification 1' 实时监听 不要忘了,我们需要的是实时监听,因此还需要监听下

    2K30

    那些年遇到的bug(2)

    的错误,但是查看虚拟机自带的浏览器,是可以上网的,所以检查还是代码的问题,这里给大家列出一些android开发中使用WebView时需要注意的一些小细节,大家共享。...Activity中处理消费掉该Back事件。...$1.handleMessage(UmengUpdateAgent.java:268) 04-13 14:29:03.766: W/com.umeng.update.UmengUpdateAgent(9737...再次部署Android应用在上面就可以成功了 5、调试成功、运行失败 在一次项目中,有一个数据迟迟不能出来,后来经过多番的调试,数据结果能运行出来,但是一旦进入直接运行,结果就是显示不出来,通过system...,那么就很明显是图片的问题啦,然后查阅资料发现: 原来是.9图没做好,只做了一边,还需要另一边,即左边和上边必须加上。

    891120

    Android4.4.2源码分析之WiFi模块(一)

    由对Androidsetting的源码分析之WiFi模块的界面fragment为WiFisettings.java,关于setting模块的源码分析可以参考 Android系统源码剖析(一)---Settings...已经写了几篇关于Android源码的,源码代码量太大,所以如果想分析某个模块可能不知如何下手,说一下思路 1,分析源码英文阅读能力要够,想要分析某个模块一般找模块对应的英文,就是模块 2,找到之后首先查看清单配置文件...可以看到判断设备是否支持WiFi直连是通过PackageManager的hasSystemFeature 目录为 /android/external/robolectric/src/main/java...接入点优先级设定即是否按照所搜索到的WiFi优先级来显示Wifi列表,可以看到等级有三种:默认的信任接入点,信任接入点,未知接入点 因为在这里boolean值被设置为false,所以不按优先级排序...mWifiEnabler = new WifiEnabler(activity, actionBarSwitch); 进入WiFiEnabler可以看到,该类就做了两件事,第一注册广播监听WiFi的变化随之改变

    83710

    Android Handler机制7之消息发送

    本片文章的主要内容如下: 1、Handler发送消息 2、Handler的send方案 3、Handler的post方案 一 、Handler发送消息 大家平时发送消息主要是调用的两大类方法 如下两图...send方案发送消息(需要回调才能接收消息) 1、sendMessage(Message) 立即发送Message到消息队列 2、sendMessageAtFrontOfQueue(Message)...该方法内部就做了两件事 1、获取消息队列,对该消息队列做非空判断,如果为null,直接返回false,表示消息发送失败 2、调用了boolean enqueueMessage(MessageQueue...第4步骤、 判断消息队列是否正在被关闭,如果是正在被关闭,则return false告诉消息入队是失败,并且回收消息 第5步骤、 设置msg的when并且修改msg的标志位,msg标志位显示为已使用...第13步骤、 如果需要唤醒,则唤醒,具体请看后面的Handler中的Native详解。 第14步骤、 返回true,告知入队成功。 提供两张图,让大家更好的理解入队 ? 入队1.png ?

    1.3K10

    ViewModels and LiveData- Patterns + AntiPatterns

    视图通常没有单元测试(除非你使用Robolectric),所以代码行数越少越好。视图应该只知道如何显示数据并将用户事件发送到ViewModel(或Presenter)。这就是所谓的被动视图模式。...然而,你可能需要在ViewModels也消失的其他情况下恢复状态:例如,当操作系统资源不足杀死了你的进程时。...; 该Activity接收该值显示Snackbar。这显然是有效的。 然而,如果用户旋转手机,新的Activity被创建开始观察。...当LiveData观察开始时,该Activity立即收到旧的值,这导致消息再次显示出来。 与其试图用库或架构组件的扩展来解决这个问题,不如将其作为一个设计问题来面对。.../todoapp/app/src/main/java/com/example/android/architecture/blueprints/todoapp/addedittask/AddEditTaskFragment.java

    1.1K30

    腾讯笔试+查漏补缺 synchronized和ReentrantLock的区别

    int sum = 11; // 代表 目标要凑够的钱数 8 int d[12]; // 代表 表示凑够最少需要的硬币个数 9 d[0] = 0; 10...的使用中 , 需要注意位置的不同 . 1 , getGlobalVisibleRect 获取的 rect 是从屏幕左上角开始的 , 也就是说 , 把我们手机顶部显示时间,电量,wifi等图标的那一栏给计算进去了...IM架构设计中,好友删除部分,如果当前被删者在发送消息的页面,而且断网期间没接收到被删除推送,那么恢复网络后,他发消息给删除者,应该在删除者端判断,该人还是否在好友列表再决定显示,避免在发送 服务端 每次做查询操作...如果还是失败,安装 nohup ,nohup ....:width="0dp" android:color="#0CA5DF" /> 29 30 <corners android:bottomLeftRadius="0dp" android

    1.6K50
    领券