我有各种实现来partial class DeviceServices为 Android、iOS 等提供某些设备或操作系统特定功能的平台特定实现。我的应用程序的目标 API 级别为 33.0,最低版本为 API 级别 21.0。
某些 API 特定于某些 Android 版本及更高版本,因此我想确保仅在受支持的版本上调用它们。但是,我总是收到以下警告(以及类似的警告,具体取决于所使用的 API):
警告 CA1416:可在“Android”21.0 及更高版本上访问此调用站点。“WindowInsets.Type.SystemBars()”仅支持:“android”30.0 及更高版本。
以下隐藏和显示系统栏的代码适用于我迄今为止尝试过的所有设备和模拟器,但我担心早期的 Android 版本。尽管检查了正确的目标 API 版本,我仍然收到上面的警告:
static partial class DeviceServices
{
private static Activity _activity;
public static void SetActivity(Activity activity)
{
_activity = activity;
}
public static partial void HideSystemControls()
{
#if ANDROID30_0_OR_GREATER
if (Build.VERSION.SdkInt >= BuildVersionCodes.R) //R == API level 30.0
{
_activity?.Window?.InsetsController?.Hide(WindowInsets.Type.SystemBars());
}
#endif
}
public static partial void ShowSystemControls()
{
#if ANDROID30_0_OR_GREATER
if (Build.VERSION.SdkInt >= …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个创建一个兼容API级别高于.ms的短信的意图KitKat.该代码有效,但我收到了一个警告,即API级别19是必需的.我试图解决它,@TargetApi(Build.VERSION_CODES.KITKAT)但得到一个警告" Annotations这里不允许".
是否有一种简单的方法可以忽略此警告?
private boolean apLowerThanKitKat = (Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.KITKAT);
Intent smsIntent = new Intent(android.content.Intent.ACTION_SEND);
if (apLowerThanKitKat)
{
smsIntent.setPackage("vnd.android-dir/mms-sms");
}
else
{
//@TargetApi(Build.VERSION_CODES.KITKAT)
smsIntent.setPackage(Telephony.Sms.getDefaultSmsPackage(getActivity()));
}
Run Code Online (Sandbox Code Playgroud)
提前致谢!
我试图阻止Android信标库的调试,但它不起作用.
我在我的gradle中有这个:
compile 'org.altbeacon:android-beacon-library:2.3.3'
Run Code Online (Sandbox Code Playgroud)
我试过了:
public BeaconManager(Context ctx, org.altbeacon.beacon.BeaconManager beaconManager) {
mContext = ctx;
this.beaconManager = beaconManager;
// this is saying deprecated
this.beaconManager.setDebug(false);
// I also tried this and the same thing
org.altbeacon.beacon.logging.LogManager.setVerboseLoggingEnabled(false);
Run Code Online (Sandbox Code Playgroud)
但无论如何,我一直在获取这些日志.他们开始调试其他事情.
02-18 16:21:29.784 31809-31818/com.myapp D/ScanRecord: first manudata for manu ID
02-18 16:21:29.784 31809-31818/com.myapp D/BluetoothLeScanner: onScanResult() - ScanResult{mDevice=45:0A:1B:49:64:7F, mScanRecord=ScanRecord [mAdvertiseFlags=6, mServiceUuids=[f41ef1ee-fde5-23be-5f4b-589c71babfdd], mManufacturerSpecificData={76=[2, 21, 97, 104, 113, 9, -112, 95, 68, 54, -111, -8, -26, 2, -11, 20, -55, 109, 0, 3, 17, -71, -89]}, mServiceData={}, mTxPowerLevel=-2147483648, mDeviceName=BC Beacon?], …Run Code Online (Sandbox Code Playgroud) 我在android studio中有一个Android应用程序的项目.该项目有6个模块(3个内部库,1个Android应用程序模块,1个可穿戴模块和1个用于在应用程序和可穿戴设备之间共享代码的模块),一切运行良好,直到我们决定更改应用程序的最小android sdk.
它最初与16+兼容,我们希望使它成为21+.我们尝试只更改最小sdk,升级最小sdk和编译sdk(到23和24或21 ......)甚至升级构建工具(到23中的23)但似乎没有任何工作...我设法当我启用gradle守护进程时出现"我有时"的工作原因我真的不明白,但这对于我们构建CI来说并不是一个很好的选择.
所以完全绝望,我问是否有人知道可能是什么问题......
错误是com.android.build.api.transform.TransformException:java.util.zip.ZipException:打开zip文件时出错.我从来没有在构建时看到它但我们也运行"connectedAndroidTest"我们似乎打包每个模块并且这个错误发生在随机模块中并且使用--info或--debug构建并不表示哪个zip文件打开导致错误. .
1:Task failed with an exception.
-----------
* What went wrong:
Execution failed for task ':shared:transformClassesWithDexForDebugAndroidTest'.
> com.android.build.api.transform.TransformException: java.util.zip.ZipException: error in opening zip file
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
==============================================================================
2: Task failed with an exception.
-----------
* What went wrong:
Execution failed for task ':common:messages:transformClassesWithDexForDebugAndroidTest'.
> com.android.build.api.transform.TransformException: java.util.zip.ZipException: error in opening zip file
* Try: …Run Code Online (Sandbox Code Playgroud) 考虑以下:
minSdkVersion为16,因为它覆盖了99%以上的设备(1)。-D__ANDROID_API__)必须等于minSdkVersion(3)。我试图进行研究以弄清楚所有这些东西是如何工作的-直到现在我一直主要通过试图建立依赖关系以将我的C ++库移植到Android来破解自己的方式-请原谅如果我缺少明显的东西。但是在我看来,上述表明从Android NDK生成的应用必须从2019年8月1日开始将最低API级别定位为21.这是否正确?
参考文献:
我用“印地语”语言实现了文本到语音转换,它是一种印度语言,我的应用程序在 API 级别 29 之前工作正常。它对于英语工作正常,但对于印地语则不然。但在 API 级别 30 的新设备中,它不起作用。在 API 级别 30 设备中调试其给出的结果值 -2“语言不支持错误”。
private void setTextTospeech() {
textToSpeech = new TextToSpeech(mContext, new TextToSpeech.OnInitListener() {
@Override
public void onInit(int status) {
if (status == TextToSpeech.SUCCESS) {
if (language.toLowerCase().contains(langaugeCodeEnglish)) {
int result = textToSpeech.setLanguage(new Locale("en", "IN"));
if (result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED) {
//Toast.makeText(mContext, result + " is not supported", Toast.LENGTH_SHORT).show();
Log.e("Text2SpeechWidget", result + " is not supported");
}
} else {
int result = textToSpeech.setLanguage(new Locale("hi", "IN"));
if …Run Code Online (Sandbox Code Playgroud) android text-to-speech android-manifest android-studio android-api-levels
我们最近将我的应用程序目标 SDK 迁移到 33,因此应用程序链接在模拟器中无法正常工作,但在真实设备中却无法正常工作
我用谷歌搜索了一下,并在我的设备中手动选择了网址,链接工作正常,但我不能要求应用程序用户每次都这样做
我已经阅读了android文档
https://developer.android.com/training/app-links/verify-android-applinks#manual-verification
这里他们提到了手动验证Android 12以上的Domines的过程
但是当我运行adb shell am compat enable 175408749 com.myapp.package
终端正在抛出消息说
无法覆盖 com.modere.global 的 175408749,因为应用的 targetSdk (33) 高于更改的 targetSdk 阈值 (30)
我如何验证域名,请帮助我
我有一个应用程序在运行 API 23 的实际设备 Nexus 6P 和运行 API 24 的模拟 6P、5 和 4 上完全按需要运行,但GridLayout在运行 API 22 的模拟 Nexus 5 和 4 上显示出奇怪的行为。
该应用程序只有一个活动,其中包含多个RelativeLayout以编程方式设置的.VISIBLE& .INVISIBLE。在一个这样的RelativeLayout我有 2 GridLayouts 如下。模拟 API 22 时,底部GridLayout不显示,但顶部始终显示,与 API 22、23 或 24GridLayout无关。底部仅在我将模拟器设置更改为 API 24 时显示(未尝试 23)。为什么会这样?我认为我没有使用任何GridLayout需要 API 23 或更高版本的东西。此问题意味着我无法在运行 API 22 或 21 的 Nexus 5 上安装此应用程序。感谢您的任何建议。
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/gameOperations"
android:visibility="invisible">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/launchDisplay"
android:gravity="center_horizontal">
<TextView
android:text="@string/app_name"
android:layout_width="match_parent"
android:layout_height="wrap_content" …Run Code Online (Sandbox Code Playgroud) android android-emulator android-gridlayout android-relativelayout android-api-levels
我使用 getSize() 方法来获取屏幕尺寸:
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val fragmentActivity = requireActivity()
...
val wm = fragmentActivity.getSystemService(Context.WINDOW_SERVICE) as WindowManager
val display = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
fragmentActivity.display
} else {
wm.defaultDisplay
}
val size = Point()
display?.getSize(size)
// get screen sizes
val width = size.x
val height = size.y
...
}
Run Code Online (Sandbox Code Playgroud)
但是在 API 级别 30 中,方法 getSize() 被声明为已弃用。
什么可以代替 getSize() 用于获取屏幕尺寸?
感谢您的任何评论/回答!
解决方案:
val wm = fragmentActivity.getSystemService(Context.WINDOW_SERVICE) as WindowManager
val width: Int
val height: Int
if (Build.VERSION.SDK_INT …Run Code Online (Sandbox Code Playgroud) 我有一个项目,其中收到以下 Android lint 警告:
过时的自定义 lint 检查
../../../../../../../.gradle/caches/transforms-2/files-2.1/fc4398fa701898f50fcec85691d33578/appcompat-1.2.0/jars/lint.jar:发现Lint
androidx.appcompat.AppCompatIssueRegistry需要更新 API 级别的问题注册表 ( )。这意味着自定义 lint 检查适用于较新的 lint 版本;请升级 Lint 可以通过“自定义检查”进行扩展:由开发人员和库实施的额外检查,例如强制执行库或公司编码风格指南所需的特定 API 使用。Lint API 尚不稳定,因此这些检查可能会导致性能下降、停止工作或提供错误结果。
此警告标记发现使用过时 API 并且需要更新以在当前 lint 环境中运行的自定义 lint 检查。
它还可能标记发现使用较新版本 API 的问题,这意味着您需要使用较新版本的 lint(或 Android Studio 或 Gradle 插件等)来处理这些检查。要抑制此错误,请使用问题 ID“ObsoleteLintCustomCheck”,如抑制警告和错误部分所述。
ObsoleteLintCustomCheck 警告优先级 10/10
我什至不知道这意味着什么,我不使用任何自定义的 lint 东西。它也只出现在 app 模块中,而不出现在库模块中。
我刚刚将我的项目从 API 26 提升到 30,并切换到 AndroidX/JetPack。
要重现它,请克隆项目,签出commit 96273fd8b1af5d5c63603b7df71e0849f518a9e5,更改到android/子目录并运行./gradlew lint. 我不知道这是否可以减少或如何减少(我是 Android 开发的新手,因为它的问题而诅咒天空,自 1980 年代后期以来一直在开发软件)。
android ×10
android-lint ×1
android-ndk ×1
beacon ×1
c# ×1
dependencies ×1
gradle ×1
java ×1
kotlin ×1
maui ×1
proximity ×1