这就是事情.我有一个与API 15及更高版本兼容的应用程序,但由于它非常大而且我已经达到65k方法限制,我不得不将其作为MultiDexApplication类的后代.这会稍微减慢构建时间,因此我必须实施一些优化来加速该过程.我在清单中有以下代码,这可以显着减少构建API> = 21时的构建时间(取自其他一些SO线程):
productFlavors {
dev {
minSdkVersion 21
}
prod {
minSdkVersion 15
}
}
Run Code Online (Sandbox Code Playgroud)
一切都很完美,但问题是在开发过程中,Android工作室认为我的minSdkVersion SDK级别是21(正确),并且lint没有显示我不兼容的API(15-21).我真正想要的是能够使用minSdkVersion设置为21(快速构建),但将"lint minSdkVersion"设置为15,所以我看到代码的部分与旧的API不兼容,而不是21.我尝试过google它,也调查AS lint首选项,但我没有找到任何有用的东西.谢谢你的任何建议.我目前的解决方案是将dev风格的minSdkVersion切换为21并检查是否有任何错误,但这不是我想要的.
我正在创建一个应用程序,我需要收集状态栏通知.系统会提示用户允许我实现NotificationListenerService(API> = 18)或AccessibilityService(其他设备),并将它们重定向到设置屏幕.
当我在API <18时,用户被重定向到辅助功能设置屏幕,他允许辅助功能服务,一切正常.但是,当用户在18> =时,即使用户被重定向到通知设置,他仍然可以导航到辅助功能设置以允许辅助功能服务.我的两个服务都在注册通知并通知我.
显然,我可以检查消息来自哪个服务并做出相应的反应,但我更喜欢一些更清洁的解决方案.我不希望用户能够同时允许这两种服务(它们都出现在设置中).
有没有办法为不同的API级别定义单独的清单文件或声明<uses-sdk>内部<application>标记,以便它们将用于不同的API级别?当然,我们不能以编程方式创建服务 - 我们必须在清单中声明它们.
我们正在将现有的 Javascript Google 登录迁移到新的 Google OAuth 库,如此处弃用通知中所述 - https://developers.googleblog.com/2021/08/gsi-jsweb-deprecation.html
我们遵循本指南,我们的 javascript 代码如下所示:
const client = google.accounts.oauth2.initTokenClient({
client_id: <our-client-id>,
scope: 'https://www.googleapis.com/auth/userinfo.email \
https://www.googleapis.com/auth/userinfo.profile',
callback: (tokenResponse: any) => {
if (tokenResponse && tokenResponse.access_token) {
if (google.accounts.oauth2.hasGrantedAllScopes(tokenResponse,
'https://www.googleapis.com/auth/userinfo.email',
'https://www.googleapis.com/auth/userinfo.profile')) {
console.log(tokenResponse.access_token );
.. further auth logic
}
}
}
});
client.requestAccessToken();
Run Code Online (Sandbox Code Playgroud)
从某种意义上说,一切工作正常,我能够从 Google 检索令牌,只是看起来新库生成的 JWT 令牌无效。更准确地说,它与 JWT 令牌规范不匹配 - 令牌不由 3 部分组成(标头/有效负载/签名)并且太短(意味着它可能不携带应携带的所有数据)。它也没有通过 https://jwt.io/中的验证
让我给你举个例子。
以前版本的库生成的令牌:
eyJhbGciOiJSUzI1NiIsImtpZCI6Ijg2MTY0OWU0NTAzMTUzODNmNmI5ZDUxMGI3Y2Q0ZTkyMjZjM2NkODgiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJhY2NvdW50cy<...>1MWMifQ.OgOOhbTTbLYzcx NhNdvozf1<...>4bRLT3DILyWeO1FX64WaabGRjCR2amQ
新库生成的令牌:
ya29.A0ARrdaM_hHsX50Qim6c1NudaZvv6qMpMkbNxW-ltOh49s6U4JKZNvPJV3d0TAE_rqqvkvVG2983ryewiufhdsklKGiH-vEdIs7u2389iwek-dcgkY1SE-b21g0932oiweKT-ZKTJvmHA是
因此,问题是新版本的库不会返回正确的 JWT 令牌(如上所述)。我们不能将这个新令牌用于任何用途,因为我们无法验证它的完整性(谁颁发的、令牌秘密是否与我们的应用程序 ID 匹配、令牌何时过期等)。
我还尝试使用 Google 自己的 OAuth 调试端点对此进行测试,但它也抱怨第二个令牌无效:
https://oauth2.googleapis.com/tokeninfo?id_token=ya29.A0ARrdaM_hHsX50Qim6c1NudaZvv....
Run Code Online (Sandbox Code Playgroud)
注意:由于 …