草庐IT

android - 木材 Lint : ClassNotFound: com/android/tools/lint/detector/api/Detector$JavaPsiScanner

coder 2023-12-24 原文

Timber (V 4.5.0) lint 检查只能通过 Gradle 进行(但不能通过 lint 命令进行,也不能在 Android Studio 2.3 Beta2 中进行)。

总结

当我直接在命令行上运行 lint 时出现错误。

lint --show TimberArgCount

Could not load custom rule jar file /home/tmtron/.android/lint/timber-lint.jar
java.lang.NoClassDefFoundError: com/android/tools/lint/detector/api/Detector$JavaPsiScanner

但是当我通过 gradle 调用它时它起作用了:

./gradlew lint

MainActivity.java:15: Error: Wrong argument count, 
format string %s.%s requires 2 but format call supplies 1 [TimberArgCount]
        Timber.d("%s.%s", "onCreate");
        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

详细说明

我在 GitHub 上做了一个小示例项目:TimberLintTest

基本上我是这样做的:

  • 在 Android Studio 中创建了一个简单的 Android 项目
  • 添加木材
  • 为 lint 错误激活 stdout 输出 安卓 { lint选项{ textReport true 文本输出“标准输出” } }

MainActivity我使用这样的错误日志语句:

Timber.d("%s.%s", "onCreate");

当我从命令行通过 Gradle-wrapper 执行 lint 时,它按预期工作 - 剥离输出:

MainActivity.java:15: Error: Wrong argument count, 
format string %s.%s requires 2 but format call supplies 1 [TimberArgCount]
        Timber.d("%s.%s", "onCreate");
        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

但是检查在 Android Studio 中不起作用,当我直接启动 lint 时也不起作用。
互联网上的一些资源表明我们必须将 lint.jar 文件复制到 ~/.android/lint。我为 lint.jar(来自 timber-4.5.0)做了这件事,并将它重命名为 timber-lint.jar,这样我就得到了这个文件:

~/.android/lint/timber-lint.jar

所以问题是这个JavaPsiScanner interface not found

我检查了 Timber 源代码,它依赖于 lint-api-25.0.2,其中 Detector 包含此内部接口(interface)。但是在我本地的SDK代码中(Android/Sdk/tools/lib/lint-api.jar)这个内部类并不存在(我猜这是lint命令线工具和 Android Studio 使用)。

所以我认为这只是版本不匹配。但是我不确定如何解决这个问题。
我怎么才能确定我当前的 android 工具有哪个版本的 lint-api.jar

启动sdk manager,显示Android SDK Tools版本为25.2.5(我已经更新到最新版本)。这是 lint-api.jar 的版本(还是 SDK 平台工具SDK 构建工具、.. )?

最佳答案

作为解决方法,我们可以告诉 gradle 在编译后始终运行 lint 检查。然后在 Android Studio 中按 Build - Make Project 后也会执行 lint 检查,这解决了我原来的问题。

Gradle 详细信息在 this SO-answer 中.

关于android - 木材 Lint : ClassNotFound: com/android/tools/lint/detector/api/Detector$JavaPsiScanner,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41698422/

有关android - 木材 Lint : ClassNotFound: com/android/tools/lint/detector/api/Detector$JavaPsiScanner的更多相关文章

  1. 安卓apk修改(Android反编译apk) - 2

    最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路

  2. ruby - 警告 : PATH set to RVM ruby but GEM_HOME and/or GEM_PATH not set, 请参阅 : https://github. com/wayneeseguin/rvm/issues/3212 - 2

    我每次打开终端时都会收到这个错误:警告:PATH设置为RVMruby​​但未设置GEM_HOME和/或GEM_PATH,请参阅:https://github.com/wayneeseguin/rvm/issues/3212这是在我最近安装zsh(oh-my-zsh)后开始发生的我不知道如何设置GEM_HOME和/或GEM_PATH的路径。 最佳答案 我也面临同样的问题,更改.zshrc中的以下行,exportPATH="/usr/local/heroku/bin:.........."到exportPATH="$PATH:/usr/

  3. ruby-on-rails - 在 Rails/Capybara/Poltergeist 规范中使用 url_for 将驱动程序发送到 example.com 而不是应用程序 - 2

    如果我在功能规范中调用url_for,它会返回一个以http://www.example.com/开头的绝对URL.Capybara会很乐意尝试加载该站点上的页面,但这与我的应用程序无关。以下是重现该问题的最少步骤:从这个Gemfile开始:source'https://rubygems.org'gem"sqlite3"gem"jquery-rails"gem"draper"gem"rails",'4.1.0'gem"therubyracer"gem"uglifier"gem"rspec-rails"gem"capybara"gem"poltergeist"gem"launchy"运行

  4. ruby - Ruby 中的默认哈希值 (Rubykoans.com -> about_hashes.rb) - 2

    我正在浏览RubyKoans中的about_hashes.rb.1个练习让我感到困惑:deftest_default_valuehash1=Hash.newhash1[:one]=1assert_equal1,hash1[:one]#okassert_equalnil,hash1[:two]#okhash2=Hash.new("dos")hash2[:one]=1assert_equal1,hash2[:one]#okassert_equal"dos",hash2[:two]#hm?end我的猜测是Hash.new("dos")使“dos”成为所有不存在键的默认答案。我说的对吗?

  5. ruby - 在 Mac OS X 上安装 Homebrew 无法连接到 raw.githubusercontent.com 端口 443 - 2

    当我尝试安装Homebrew时,出现以下连接被拒绝错误。请帮我解决这个问题。$ruby-e"$(curl-fsSLhttps://raw.githubusercontent.com/Homebrew/install/master/install)"curl:(7)Failedtoconnecttoraw.githubusercontent.comport443:Connectionrefused 最佳答案 适合我。除非它是github的真正问题,它可能是但我猜它不是,它可能是您的连接问题。您可以通过浏览器访问相同的URL吗?http

  6. ruby-on-rails - 为 UrlFormat 添加排除选项到 scss_lint gem - 2

    我正在使用gemscss_lint进行scsslinting。我遇到的问题是我在url的css中的一些字符串中有变量,所以linter报告错误:我认为应该有一种方法可以在检查中排除某些东西。我看到data:已被列入白名单,但我们有时会在我们的css中使用变量,因为它被放入了cms。UrlFormat:InvalidURL'/response/${siteId}/artifact/${campaignAndToolPath}/assets/fonts/roboto-light-webfont.woff2':badURI(isnotURI?):/response/${siteId}/art

  7. Android Studio开发之使用内容组件Content获取通讯信息讲解及实战(附源码 包括添加手机联系人和发短信) - 2

    运行有问题或需要源码请点赞关注收藏后评论区留言一、利用ContentResolver读写联系人在实际开发中,普通App很少会开放数据接口给其他应用访问。内容组件能够派上用场的情况往往是App想要访问系统应用的通讯数据,比如查看联系人,短信,通话记录等等,以及对这些通讯数据及逆行增删改查。首先要给AndroidMaifest.xml中添加响应的权限配置 下面是往手机通讯录添加联系人信息的例子效果如下分成三个步骤先查出联系人的基本信息,然后查询联系人号码,再查询联系人邮箱代码 ContactAddActivity类packagecom.example.chapter07;importandroid

  8. Android 10.0 设置默认launcher后安装另外launcher后默认Launcher失效的功能修复 - 2

    1.前言 在10.0的系统rom定制化开发中,在系统中有多个launcher的时候,会在开机进入launcher的时候弹窗launcher列表,让用户选择进入哪个launcher,这样显得特别的不方便所以产品开发中,要求用RoleManager的相关api来设置默认Launcher,但是在设置完默认Launcher以后,在安装一款Launcher的时候,默认Launcher就会失效,在系统设置的默认应用中Launcher选项就为空,点击home键的时候会弹出默认Launcher列表,让选择进入哪个默认Launcher.所以需要从安装Launcher的流程来分析相关的设置。来解决问题设置默认La

  9. ruby-on-rails - Rails SSL 问题 : (https://example. com) 与 request.base_url (http ://example. com) 不匹配 - 2

    我刚刚在我的网站上安装了SSL证书。不幸的是,它破坏了登录功能。在网站上提交登录表单后,它只是重定向到主页。检查Rails日志显示此错误:(https://example.com)didn'tmatchrequest.base_url(http://example.com)这是我的虚拟主机文件。我想我需要以某种方式强制使用SSL?ServerNameexample.comServerAliaswww.example.comRedirectpermanent/https://example.com/ServerAdminhello@example.comServerNameexample

  10. AiBote 2022 新研发的自动化框架,支持 Android 和 Windows 系统。速度非常快 - 2

    Ai-Bot基于流行的Node.js和JavaScript语言的一款新自动化框架,支持Windows和Android自动化。1、Windowsxpath元素定位算法支持支持Windows应用、.NET、WPF、Qt、Java和Electron客户端程序和ie、edgechrome浏览器2、Android支持原生APP和H5界面,元素定位速度是appium十倍,无线远程自动化操作多台安卓设备3、基于opencv图色算法,支持找图和多点找色,1080*2340全分辨率找图50MS以内4、内置免费OCR人工智能技术,无限制获取图片文字和找字功能。5、框架协议开源,除官方node.jsSDK外,用户可

随机推荐