标签: android-lint

此Handler类应该是静态的,否则可能会发生泄漏:IncomingHandler

我正在开发一个带有服务的Android 2.3.3应用程序.我在服务中有这个与Main活动进行通信:

public class UDPListenerService extends Service
{
    private static final String TAG = "UDPListenerService";
    //private ThreadGroup myThreads = new ThreadGroup("UDPListenerServiceWorker");
    private UDPListenerThread myThread;
    /**
     * Handler to communicate from WorkerThread to service.
     */
    private Handler mServiceHandler;

    // Used to receive messages from the Activity
    final Messenger inMessenger = new Messenger(new IncomingHandler());
    // Use to send message to the Activity
    private Messenger outMessenger;

    class IncomingHandler extends Handler
    {
        @Override
        public void handleMessage(Message msg)
        {
        }
    }

    /**
     * Target we …
Run Code Online (Sandbox Code Playgroud)

android memory-leaks static-classes android-lint android-handler

287
推荐指数
4
解决办法
13万
查看次数

什么是"android:allowBackup"?

自从新的ADT预览版本(版本21)以来,它们有一个新的lint警告,它告诉我清单文件(在应用程序标记中)的下一件事:

应该明确地将android:allowBackup设置为true或false(默认情况下为true,这可能会对应用程序的数据产生一些安全隐患)

官方网站上,他们写道:

一些新检查:您必须明确决定您的应用是否允许备份和标签检查.有一个新的命令行标志用于设置库路径.编辑时增量lint分析的许多改进.

这警告是什么?什么是备份功能,以及如何使用它?

另外,为什么警告告诉我它有安全隐患?禁用此功能有哪些缺点和优点?


清单有两种备份概念:

  • "机器人:allowBackup "允许备份和通过ADB恢复,如图所示在这里:

是否允许应用程序参与备份和还原基础结构.如果此属性设置为false,则不会执行应用程序的备份或还原,即使是全系统备份也会导致所有应用程序数据都通过adb保存.此属性的默认值为true.

这被认为是一个安全问题,因为人们可以通过ADB备份您的应用,然后将您应用的私人数据导入他们的PC.

但是,我认为这不是一个问题,因为大多数用户不知道什么是adb,如果他们这样做,他们也会知道如何根设备.ADB功能仅在设备启用了调试功能时才有效,这需要用户启用它.

因此,只有将其设备连接到PC并启用调试功能的用户才会受到影响.如果他们的PC上有使用ADB工具的恶意应用程序,这可能会有问题,因为应用程序可以读取私有存储数据.

我认为Google应该在开发人员类别中添加默认禁用的功能,以允许通过ADB备份和恢复应用.

  • "机器人:backupAgent "允许使用的备份和恢复云的功能,如在这里这里:

实现应用程序备份代理的类的名称,BackupAgent的子类.属性值应该是完全限定的类名(例如"com.example.project.MyBackupAgent").但是,作为简写,如果名称的第一个字符是句点(例如,".MyBackupAgent"),则它将附加到元素中指定的包名称.没有默认值.必须指定名称.

这不是安全问题.

android adt compiler-warnings android-lint android-backup-service

252
推荐指数
3
解决办法
13万
查看次数

如何将baselineAligned设置为false可以提高LinearLayout的性能?

我只是在xml中构建一些UI,Lint给了我一个警告,并说要将android:baselineAligned设置为false以提高ListView的性能.

添加此警告的Lint更改的文档说

布局性能:使用权重查找LinearLayouts,您应该设置android:baselineAligned ="false"以获得更好的性能,还会发现嵌套权重可能导致性能问题的情况.

有人可以解释为什么这会改善性能,特别是涉及体重时?

android listview android-lint

209
推荐指数
3
解决办法
4万
查看次数

Lint:如何忽略"<key>未在<language>中翻译"错误?

我无法编译/调试我们的Android应用程序,因为本地化文件还不完善.

我的IDE的验证工具Lint创建错误说:

newCardsOrderVals未翻译为ar,bg,ca,cs

使用Ant编译/安装/运行工作正常,但我想使用我的IDE来简化调试.

有没有办法关闭这个特定的检查,或理想情况下使其成为警告而不是错误?

我知道在发布之前我们确实需要正确地获取本地化文件,但暂时不是优先级,因为屏幕本身正在经常被修改.

eclipse localization android-resources android-lint android-studio

188
推荐指数
9
解决办法
10万
查看次数

缺少对Firebase应用程序索引的支持(​​android lint)

在分析Android工作室的代码(Analyze> Inspect Codes)时,我收到此lint警告.

Google搜索无法将应用程序编入索引; 考虑使用ACTION-VIEW意图填充添加至少一个活动.有关详细信息,请参阅问题说明

这是什么警告,以及如何通过Google搜索将我的应用程序编入索引?对SEO来说这听起来很重要,但我在Google上找不到任何细节.

我也想知道如何从android studio访问"问题解释".

在此输入图像描述

编辑:

"谷歌搜索无法将应用程序编入索引"是旧警告.新警告"缺少对Firebase应用程序索引的支持"

permissions warnings android-manifest android-lint android-studio

148
推荐指数
4
解决办法
6万
查看次数

Android Lint contentDescription警告

我收到警告,因为"[可访问性]在图像上缺少contentDescription属性"for imageview.而使用android lint

那是什么意思?

android android-layout android-lint

126
推荐指数
7
解决办法
11万
查看次数

避免Android Lint抱怨未翻译的字符串

是否可以指定value-* 目录中文件中的字符串故意不转换为其他语言?我有一堆字符串,这些字符串对所有语言都很常见,不需要翻译,所以我unlocalized-strings.xmlvalues目录中创建了一个文件.运行Android Lint来检查问题,它一直说有些翻译丢失了......我不想要要对整个项目禁用此检查,我只想在某些XML文件中禁用它..是否可能?

"title_widget_updater_service" is not translated in de, en, en-rUS, it

Issue: Checks for incomplete translations where not all strings are translated
Id: MissingTranslation

If an application has more than one locale, then all the strings declared in one language     
should also be translated in all other languages.

By default this detector allows regions of a language to just provide a subset of the 
strings and fall back to the standard language strings. You …
Run Code Online (Sandbox Code Playgroud)

android android-resources android-lint

117
推荐指数
5
解决办法
6万
查看次数

AppCompatActivity.onCreate只能在同一个库组中调用

升级到appcompat后,25.1.0我开始收到有线错误.

在我的代码中:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
Run Code Online (Sandbox Code Playgroud)

我得到lint错误:

AppCompatActivity.onCreate can only be called from within the same library group (groupId=com.android.support)

如何防止这种行为?

android android-appcompat android-lint

94
推荐指数
3
解决办法
4万
查看次数

为什么0dp被认为是性能增强?

这个问题末尾的答案已经填写完整,结合了评论和解决方案.

我四处搜索,但没有发现任何真正解释为什么Android Lint以及一些Eclipse提示建议用一些layout_heightlayout_width值替换0dp.

例如,我有一个ListView建议改变

之前

<ListView
    android:id="@android:id/list"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1">
</ListView>
Run Code Online (Sandbox Code Playgroud)

<ListView
    android:id="@android:id/list"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1">
</ListView>
Run Code Online (Sandbox Code Playgroud)

同样,它建议更改ListView项.这些在变化之前和之后看起来都一样,但我有兴趣理解为什么这些是性能提升器.

任何人都有解释原因?如果它有帮助,这里是一般布局ListView.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <ImageView
        android:id="@+id/logo_splash"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    </ImageView>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical"
        android:background="@color/background"
        android:layout_below="@id/logo_splash">

        <ListView
            android:id="@android:id/list"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1">
        </ListView>

        <TextView
            android:id="@android:id/empty"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/no_upcoming" />

    </LinearLayout>        
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

回答

我在这里给出答案,因为它实际上是答案和下面引用的链接的组合.如果我对某事有误,请告诉我.

来自0dip layout_height或layouth_width的诀窍是什么?

有3种常规布局属性可用于宽度高度

  1. android:layout_height
  2. android:layout_width
  3. android:layout_weight …

android android-layout android-lint

73
推荐指数
3
解决办法
2万
查看次数

我们如何配置Android Studio以在每个构建上运行其Lint?

曾几何时,特别是在Eclipse-land中,Lint会在每次构建时运行,因此如果你没有Lint检查,你会立即发现.使用Android Studio(在1.3上测试),Lint默认情况下不会在构建上运行.新人可能会犯下Lint会检查的错误,但由于Lint实际上没有运行,新人并没有发现它们.

(IOW,如果Lint测试没有在森林中运行,那么真的有Lint测试吗?)

这篇博客文章的评论显示了如何将Lint作为构建的一部分运行:

  • 编辑项目配置
  • 在配置的"常规"选项卡中,向下滚动并折叠打开"启动前"面板
  • 在该面板中,为lint为您的模块命名的"运行Gradle任务"添加一个步骤

但是,这会运行命令行Lint,从而将报告以XML和HTML格式写入硬盘驱动器.这样可行,但让Android Studio运行其in-IDE Lint检查会更清晰,因此结果显示在IDE面板中.

有没有办法设置项目构建来执行in-IDE Lint检查?

奖励积分如果可以设置为运行Lint,而不是分析>检查代码完成的分析.虽然完整的分析偶尔会有用,但Lint足够慢,更不用说Android Studio执行的其他可疑的分析(例如,拼写检查).

虽然设置它对于所有项目来说都不是一个好的计划(Lint扫描速度很慢),但对于Android新手来说,这可能是一个合适的举措.

android android-lint android-studio

68
推荐指数
3
解决办法
2万
查看次数