Articles of lint

如果我们在没有实现其接口的情况下find类调用,则自定义Lint for Java / Android Report

我正在写一个定制的lint探测器,以获得乐趣。 我将关于在Android中创建自定义lint规则的Big Nerd Ranches课程(对于Java应该是相同的) 我可以检测到我想要的事件。 调用类构造函数。 但是由于我们通过抽象语法树遍历的事实,我无法检测到回调的实现。 我不知道如何告诉Java检查文件,只报告它是否找不到事件。 在这种情况下,接口实现。 因为我一次只看到一片叶子。 如何查找两次事件,存储每次发生的位置,然后执行我的逻辑并相应地报告? package com.bignerdranch.linette.detectors; import com.android.annotations.NonNull; import com.android.tools.lint.detector.api.Category; import com.android.tools.lint.detector.api.Context; import com.android.tools.lint.detector.api.Detector; import com.android.tools.lint.detector.api.Implementation; import com.android.tools.lint.detector.api.Issue; import com.android.tools.lint.detector.api.JavaContext; import com.android.tools.lint.detector.api.Location; import com.android.tools.lint.detector.api.Scope; import com.android.tools.lint.detector.api.Severity; import com.android.tools.lint.detector.api.TextFormat; import java.io.File; import java.util.EnumSet; import java.util.List; import lombok.ast.AstVisitor; import lombok.ast.Node; /** * Lint check for the usage of to-do statements […]

解析自定义lint规则中的资源值

我有一个很大的Android代码库,我正在编写一个自定义lint规则,用于检查某些属性的值是否在给定范围内。 例如,我有这个组件: 我想写一个lint规则,提醒开发人员my:animation_factor应该谨慎使用my:animation_factor > = 1的值。 我按照http://tools.android.com/tips/lint-custom-rules上的说明操作,并设法使用以下代码检索my:animation_factor的值: import com.android.tools.lint.detector.api.*; public class XmlInterpolatorFactorTooHighDetector { …. @Override public Collection getApplicableElements() { return ImmutableList.of(“MyCustomComponent”); } @Override public void visitElement(XmlContext context, Element element) { String factor = element.getAttribute(“my:animation_factor”); … if (value.startsWith(“@dimen/”)) { // How do I resolve @dimen/xyz to 1.85? } else { String value = Float.parseFloat(factor); } } […]

Android Studio:为if语句抑制lint警告

我的Android项目中有一个代码: public boolean isLoadInProgress(boolean privateLoad, boolean publicLoad) { if (privateLoad && privateLoadInProgress) { return true; } if (publicLoad && publicLoadInProgress) { return true; } return false; } 我在第二个if语句中得到一个lint警告:’if’语句可以简化。 这显然是因为我也可以写: return publicLoad && publicLoadInProgress; 但是,为了便于阅读,我想保持这种方式。 我知道有一些内联注释注释可以在那个地方关闭lint警告,但我在Android Lint文档中找不到它。 你能告诉我这个注释/评论是什么吗?

在Android Studio上,检查“未使用的资源”不适用于我项目中的所有模块

我以这种方式运行它“菜单 – >分析 – >按名称运行检查 – >未使用的资源”,我选择整个项目,但它没有在我的主应用程序模块之外find任何未使用的资源。 所以我然后为单个模块运行它,它find了东西,但它也find了在其他模块上使用的项目。 例如,我有一个共享模块,其中包含一些常见字符串,如对话框的“关闭”。 该模块中未使用该字符串。 当我为该模块运行检查时,它发现它未使用。 另一方面,我在同一个共享模块上有一些字符串,我不再在任何地方使用它,当我运行整个项目的检查时,它将找不到该字符串。 我认为问题可能是我共享模块的方式,基本上它们在不同的目录上我导入它们将它放在settings.gradle上: include ‘:androidutils’ project(‘:androidutils’).projectDir = new File( ‘../sharedlibs/androidutils’) 然后在我的build.gradle中我只导入:androidutils作为依赖项。 其他人有这个问题吗? 谢谢。

Android,此API标记为支持库的内部,不应从应用程序错误访问

我正在使用invalidateOptionsMenu()方法来处理更改工具栏MenuItems但最近lint将此方法突出显示为ERROR并说: This API is marked as internal to the support library and should not be accessed from apps 也适用于navigationview.setNavigationItemSelectedListener(XXX); 方法和其他一些! 使用@SuppressWarnings(“RestrictedApi”)来解决这个问题是非常不合逻辑的,因为你只是忽略了lint而没有解决问题。 我该如何解决这个问题?

如何为@Nullable注释启用Android lint检查?

我注意到Android Studio将validation@Nullable是否未忽略@Nullable : 恩。 @Nullable MyObject getMyObject(); … MyObject o = getMyObject(); o.method(); ^ Method invocation ‘method’ may produce ‘java.lang.NullPointerException’ 这是由NullableProblems IntelliJ警告强制执行的。 我想通过lint规则在构建时从gradle强制执行此规则。 有没有人碰巧知道是否有可能通过gradle启用类似的东西?

皮棉错误“不要将位置视为固定; 只能立即使用…“

我正在为开源库做贡献并得到lint错误“不要将位置视为已修复;只能立即使用并调用holder.getAdapterPosition()以便稍后查找”以获取此代码: @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { mAdapter.onBindViewHolder(holder, position); if (!isFirstOnly || position > mLastPosition) { for (Animator anim : getAnimators(holder.itemView)) { anim.setDuration(mDuration).start(); anim.setInterpolator(mInterpolator); } mLastPosition = position; } else { ViewHelper.clear(holder.itemView); } } 我已经检查过这是因为保存位置以备将来使用。 图书馆创建者为什么需要这种逻辑是一个问题。 但是当我将位置的使用holder.getAdapterPosition()为使用holder.getAdapterPosition()时,问题就消失了: @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { mAdapter.onBindViewHolder(holder, position); if (!isFirstOnly || holder.getAdapterPosition() > mLastPosition) […]

Android Studio SuppressLint“ClickableViewAccessibility”无效

在某些情况下,我想在我的ScrollView上禁用滚动。 为此,我使用.setOnTouchListener并在onTouch返回true 。 3.0工作室给了我lint警告我也应该覆盖performClick方法,我不想这样做。 当我点击alt+enter它给了我一个选择来抑制这个警告,它将@SuppressLint(“ClickableViewAccessibility”)到我的方法中。 不幸的是,这不起作用 – 我仍然看到警告。 我也尝试过//noinspection不同组合,但没有运气。 我怎么能压制这个棉绒警告?

如何在Gradle脚本中禁止Android Lint警告

我的Android Lint报告中有以下恼人的警告: Gradle Dependency: Obsolete Gradle Dependency A newer version of com.android.support:appcompat-v7 than 20.+ is available: 21.0.0-rc1 问题是我不能使用21.0.0-rc1,因为它不适用于我的项目。 我怎样才能抑制警告?

“auth_client_using_bad_version_title”在此处已翻译,但在默认语言环境中找不到

我被迫使用Google Play服务(我需要定位服务)。 因此,在我在设备上编写所有代码和测试应用程序后,我尝试导出已签名的应用程序。 而我得到的只是Lint错误(即使我将Lint中的MissingTranslation错误从致命变为警告) “auth_client_using_bad_version_title” is translated here but not found in default locale 这个错误在所有“values-”文件夹中重复我知道我可以在导出应用程序之前禁用lint检查。 但有没有办法在谷歌开发人员没有任何黑客,错误和诅咒的情况下做到这一点? 所以我认为这个案例有以下两点之一: 我是白痴或者 谷歌发布废话,不允许使用其他谷歌垃圾等。