我使用版本开关来支持较旧的Android版本。
int sdk = Build.VERSION.SDK_INT;
if (sdk < Build.VERSION_CODES.HONEYCOMB) {
ColorDrawable colorDrawable = new ColorDrawable(shapeColor);
//noinspection deprecation
viewHolder.shape.setBackgroundDrawable(colorDrawable);
} else {
viewHolder.shape.setColor(shapeColor);
}
从命令行使用Gradle构建项目时,Lint会输出以下警告:
app/src/main/java/com/example/MyApp/CustomListAdapter.java:92: warning:
[deprecation] setBackgroundDrawable(Drawable) in View has been deprecated
viewHolder.shape.setBackgroundDrawable(colorDrawable);
^
我是否可以注释特定的行或方法来静音警告(因为我是故意这样做的)?我不想要停用所有警告。
答案 0 :(得分:8)
新功能:不确定Android Studio,但是,要从此行中删除此警告,您可以使用:
//noinspection deprecation
这将从下一行中删除警告。 E.g:
//noinspection deprecation
e.setBackgroundDrawable(editTextDrawable);
不会显示错误。 然而,正如@JJD所说,这仍然会向控制台输出警告。但至少你可以拥有一个很好的无错误代码,这对于Git来说非常有用。并且,这可以防止@SupressWarnings
的问题,它忽略了方法中的所有警告。因此,如果您有一些您不知道的弃用内容,@SupressWarnings
将隐藏它,您将不会收到警告。这是//noinspection
答案 1 :(得分:4)
我遇到了类似的问题。首先我得到了编译器警告:
:compileDebugJava
Note: /path/file.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
您可以使用@SuppressWarnings("deprecation")
来抑制它,或者只是忽略它,因为它是一个警告并且确实导致您的构建失败。
另外我得到了lint错误(build/lint-results.html
中的详细信息):
Call requires API level 13 (current min is 9)
可以通过添加@SuppressLint("NewApi")
来抑制这种情况。或者,您可以使用@TargetApi(13)
来暗示方法/类可能使用依赖于API版本13的方法,而不是您设置为minSdkVersion
的方法(例如9)。
注释只能在类或函数级别完成,而不能用于单行。另请注意&#34;弃用&#34;不应该大写,而对于#34; NewApi&#34;
这似乎并不重要。答案 2 :(得分:4)
我注意到@SuppressLint("deprecated")
内联注释不再被提取 - 而@SuppressWarnings("deprecation")
被选中。
可以在模块级Deprecation
文件中禁用带有lintOptions
的Gradle linter的build.gradle
检查;虽然没有机会定义这样的单个文件:
android {
lintOptions {
disable 'Deprecation'
}
}
或 on可以使用LintOptions:lintConfig分配一个相当详细的lint.xml
配置文件(当设置showAll true
时,它仍会显示警告 - 无论提供什么XML配置):
android {
lintOptions {
lintConfig file("lint.xml")
showAll false
}
}
通过添加路径,可以添加单个文件:
<?xml version="1.0" encoding="UTF-8"?>
<lint>
<issue id="Deprecation" severity="Error">
<ignore path="app/src/main/java/com/example/MyApp/CustomListAdapter.java" />
</issue>
</lint>
com.android.builder.model.LintOptions
的源代码可能会解释实际发生的事情(并确认了我所写的约50%)。
为了摆脱Android Studio中的内联警告...... linter似乎是另一个linter - 而且这些注释不会影响Gradle构建的linter(可能需要将其与其中一个结合使用)上述方法,以忽略已知的已弃用类和方法):
//noinspection deprecation
更新 Android Studio 2.3发行说明提及了一项新功能:
Lint Baseline:使用Android Studio 2.3,您可以将未解决的lint警告设置为项目的基线。从那时起,Lint将仅报告新问题。如果您的应用中有许多遗留的lint问题,这很有用,但只想集中精力解决新问题。了解有关Lint基线和新Lint检查的更多信息。此版本中添加了注释。
here解释了如何创建Lint警告baseline
- 将检测到的警告记录到XML文件中然后将其静音(这比获取代码更好)内联注释,遍布整个地方);我假设,选项lintConfig
和baseline
应该可以合并(取决于要求)。
android {
lintOptions {
baseline file("lint-baseline.xml")
}
}
答案 3 :(得分:3)
您需要创建一个lint.xml文件来告诉lint要忽略什么。
http://tools.android.com/tips/lint/suppressing-lint-warnings有关详细信息,请参阅此处
你可能看起来有点像这样<?xml version="1.0" encoding="UTF-8"?>
<lint>
<!-- Disable the given check in this project -->
<issue id="Deprecation">
<ignore path="app/src/main/java/com/example/MyApp/CustomListAdapter.java" />
</issue>
</lint>
要在源代码中处理此问题,您应该使用类似
的内容 @SuppressLint("Deprecation")
答案 4 :(得分:2)
大小写很重要,请在行内或全班使用以下代码:
@Suppress("DEPRECATION")
这是在科特林。
答案 5 :(得分:1)
尝试从ViewCompat
中找到一个方法来替换不推荐使用的方法。
根据您的情况,使用ViewCompat.setBackground(View, Drawable)
。
在这种情况下,有许多名为XXXCompat
的类,例如ContextCompat
,ActivityCompat
等。
答案 6 :(得分:0)
为避免出现棉绒警告,请始终对函数进行拆分,以使一个函数处理旧系统,另一个函数处理新系统。老人可以安全地警告。新的注释应该注释为只能在最新的api级别上使用。
这是一个外观的示例:
@SuppressWarnings("deprecation")
private static int getVersionCode_old(@NonNull Context appContext) {
PackageInfo pInfo;
try {
pInfo = appContext.getPackageManager().getPackageInfo(appContext.getPackageName(), 0);
return pInfo.versionCode;
} catch (Exception e) {
e.printStackTrace();
return 0;
}
}
@RequiresApi(api = Build.VERSION_CODES.P)
private static int getVersionCode_new(@NonNull Context appContext) {
PackageInfo pInfo ;
try {
pInfo = appContext.getPackageManager().getPackageInfo(appContext.getPackageName(), 0);
return (int) pInfo.getLongVersionCode();
} catch (Exception e) {
e.printStackTrace();
return 0;
}
}
public static int getVersionCodeUniversal(@NonNull Context appContext)
{
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
return getVersionCode_new(appContext);
}
else
{
return getVersionCode_old(appContext);
}
}
另一个避免掉毛警告的重要提示:如果使用的是整个不推荐使用的类,则应删除该类的所有显式导入。然后只需直接使用其完整路径访问该类,并且仅在函数的旧版本中进行操作即可。
最后,您应该考虑开始使用androidX,这是新的Google库,您将在其中找到许多可以使用的通用函数。这样一来,您可以节省大量时间解决此类小问题。例如,您可以删除上述示例的所有代码,而只需使用此新的通用androidX函数:
PackageInfo.getLongVersionCode()
答案 7 :(得分:0)
只需在函数上方使用@SuppressWarnings("deprecation")
即可仅针对该函数禁止该特定警告。
像魅力一样工作!
@Blackd有更好的答案。您应该接受!