首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android: lint总是失败,但AppLinks工作正常。

Android: lint总是失败,但AppLinks工作正常。
EN

Stack Overflow用户
提问于 2017-03-07 13:35:39
回答 1查看 413关注 0票数 2

我遇到的问题是,AppLinksAutoVerifyWarning的lint测试总是在错误消息中失败:

app链接自动验证失败.././src/debug/AndroidManifest.xml:17:此主机不支持应用程序的应用链接。检查数字资产链接JSON文件:https://myhost/.well-known/assetlinks.json

我正在使用特定于目标的AndroidManifest进行调试构建,如上面所示。对于这些调试版本,我在包名后添加了一个.debug后缀。因此,调试构建将具有包id mypackage.debug,而发布版本只会得到修补包。两个构建都使用相同的发布密钥(由于sharedUserId)进行签名,我确保assetlinks.json中的指纹与签名的指纹匹配。对于我的主机,有一个有效的ssl证书。

我上传了assetlinks.json文件,支持mypackage.debug (一个修复包),并确保它具有正确的应用程序/json。

  • 在手机上,应用程序连接工作正常。
  • 使用digitalassetlinks.googleapis.com/v1/statements:list?source.web.site=https://myhost&relation=delegate_permission/common.handle_all_urls进行验证不会提供任何错误。
  • 用AppLink测试adb shell am start -a android.intent.action.VIEW -c android.intent.category.BROWSABLE -d "http://myhost"很好
  • 我用developers.google.com/digital-asset-links/tools/generator重新创建、上传和测试了developers.google.com/digital-asset-links/tools/generator,它验证了ok,并且不生成具有不同内容的json文件。
  • 使用textmate验证json语法
  • 我还尝试将意图筛选器从调试AndroidManifest移动到主清单,将其移动到没有其他意图筛选器的其他活动中。

所以一切看起来都很好,只是林特不起作用。我可以只是禁用皮棉检查,但我宁愿让它开,所以我知道什么时候有真正的问题。

有一件事我观察到:如果我将应用程序链接的意图过滤器从https更改为http,错误消息从lint更改为:... has incorrect JSON syntax,这就更奇怪了,因为android本身和google验证服务似乎可以很好地验证它。(可能与我们将所有流量从http转发到https有关)

当前意图-过滤器是:

代码语言:javascript
复制
  <intent-filter android:autoVerify="true">
                <action android:name="android.intent.action.VIEW"/>

                <category android:name="android.intent.category.DEFAULT"/>
                <category android:name="android.intent.category.BROWSABLE"/>

                <data
                    android:host="myhost"
                    android:pathPrefix="/open_app"
                    android:scheme="https"/>


   </intent-filter>
EN

回答 1

Stack Overflow用户

发布于 2017-04-10 21:30:10

我只是遇到了同样的问题,所以我查看了源代码中的lint检查:

代码语言:javascript
复制
            switch (result.getValue().mStatus) {
            case STATUS_HTTP_OK:
                List<String> packageNames = getPackageNameFromJson(
                        result.getValue().mJsonFile);
                if (!packageNames.contains(packageName)) {
                    context.report(ISSUE_ERROR, host, context.getLocation(host), String.format(
                            "This host does not support app links to your app. Checks the Digital Asset Links JSON file: %s",
                            jsonPath));
                }
                break;

这对我来说是失败的,因为assetlinks.json中的包名与我的清单中的包名不匹配。我的团队中只有一半的人完成了将我们的顶级项目转换成库项目,并更改了顶级项目包的名称。但是,如果assetlinks.json在包名上有一个错误,也可能发生这种情况。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42649750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档