android

Android Studio编译报错:“ java.lang.OutOfMemoryError: Java heap space”

前言:

最近换了工作,到了新东家,厂子大了,人也多了,希望在新的环境中不断成长。在上家公司电脑是最好的,新的公司就是一般配置,内存只有8G,因此Android Studio3.5编译报错:java.lang.OutOfMemoryError。

原因:

java.lang.OutOfMemoryError: GC overhead limit exceeded 则表示程序消耗了太多的可用内存,并且GC屡屡没能有效回收清理。一次GC后大部分的堆空间任然被占用,GC的频繁调用将使CPU的一直处于高负荷状态,由于GC过度频繁运行,客户程序也将无法正常往下运行导致程序崩溃。

解决方法:
1.在build.gradle中的android{}添加如下脚本:

defaultConfig {

    ...

    dexOptions { 
        javaMaxHeapSize “4g” 
    }

}

2.在gradle.properites文件中添加如下配置:

# 解决OutOfMemoryError
org.gradle.daemon=true
org.gradle.parallel=true
org.gradle.jvmargs=-Xmx5120m

Android Studio -Xlint:deprecation 乱码

总结:Android Studio 安装目录下bin文件夹下 studio64.exe.vmoptions文件末尾追加

 -Dfile.encoding=UTF-8

 然后重启即可,不放心的话可以在studio.exe.vmoptions也加上

后面不用看了参考:

QUERY_ALL_PACKAGES 权限的合规思考

App接入广告SDK播放视频广告,这类型广告一般会在视频中设置第三方引流App入口,通常会配置applist权限,对设备上所安装的软件包请求广泛的可见性权限,进而实现精准向用户引流未下载的软件包,或是用于数据统计、广告分析的目的。

应用通过从终端上全局查询的 已安装应用程序列表 ,如每款应用软件的名称、版本等, 为个人设备信息类别 属于用户的敏感个人信息

Android 11及更高版本(AndroidAPI 级别30及以上)的应用,引入了QUERY_ALL_PACKAGES 权限, 更改了应用查询用户已在设备上安装的其他应用以及与之交互的方式,不同于前述11版本以下的获取applist权限的方式,无法直接获取其他已安装应用程序列表,只能查询自己应用和系统应用的信息, 而非前述请求查看的 广 泛的 应用可见 性权限。

应用 使用QUERY_ALL_PACKAGES 权限时, 如果需要查询或与之交互的其他特定应用时,需要已集成该特定应用,或是使用某服务功能需与之特定应用交互的,才可以通过添加特定应用的软件包名至

<queries>元素内声明应用需提高软件包的可见性, 从而实现请求所必需的最小软件包的可见性权限,确保应用能够在最小权限范围内收集使用用户已安装应用程序列表的敏感信息,获取适当范围内的可见性权限(有限的可见性权限)。

但是,应用通过QUERY_ALL_PACKAGES 权限获取有限的可见性权限,仍然是有门槛的,且需进行隐私权限的合规审查。

Google Play 对于目标运行环境为 Android 11(API 级别 30)且请求获取 QUERY_ALL_PACKAGES 权限 的应用 ,新政策于 2022 年 7 月 1 日开始执行

如果Play 内的应用对QUERY_ALL_PACKAGES 权限的使用,在Google Play 政策允许范畴内, 应用需在清单中明确声明此权限且声明使用范围更具体的软件包可见性权限。 否则,应用通过QUERY_ALL_PACKAGES 权限收集已安装应用程序列表,并非是应用所涉的核心功能的以及与该权限启用发现的特定应用进行的互操作,即使应用进行了权限声明,也不符合Google Play 政策要求,应用将面临被Google Play下架。

Google Play 允许QUERY_ALL_PACKAGES 权限的使用情形涉及满足以下条件的应用:为了解相关情况或进行互操作(可能符合该权限的使用条件),必须发现设备上任何及所有已安装的应用。允许的使用情形包括:设备搜索、杀毒应用、文件管理器和浏览器。

如果 应用的某个可验证的核心用途涉及金融交易功能 (例如专用银行服务、专用数字钱包), Google Play 会允许该应用仅出于安全方面的目的而广泛地查询已安装的应用。

但是,在下述场景中 不允许使用 QUERY_ALL_PACKAGES  权限

  • 对该权限的使用与实现应用的核心用途并没有直接关系。
    • 此类使用情形包括点对点 (P2P) 分享。点对点分享只有在作为应用的核心用途的情况下,才属于允许的使用情形。
  • 获取数据是为了将其出售。
  • 无需非常广泛地查询应用安装情况就能完成目标任务。

此外,Google Play特别强调通过 Play分发的应用所查询的已安装应用程序列表数据不得出售,也不得分享给其他方来用于分析或广告获利目的。

Google Play限制应用的QUERY_ALL_PACKAGES 权限,尽可能地让应用遵循最小必要原则调用权限,获取用户个人信息,同时还可以帮助Play评估应用的隐私性和安全性,应用仅能在其显著声明的目的和范围内,以及征得用户同意的目的和范围内使用QUERY_ALL_PACKAGES 权限,对于没有核心功能或用途而查询其他应用安装情况的应用, Google Play 予以清退下架。

同理,依据《个人信息保护法》,除法定无需同意的情形除外,收集使用用户个人信息,应征得个人信息主体的同意,敏感信息应取得单独同意。

对于 Android 11(API 级别 30)运行环境,App或SDK配置了QUERY_ALL_PACKAGES 权限,查询已安装应用程序列表的敏感信息时,首先需考虑其配置此权限的正当、合理与必要性。

此权限是否涉及核心功能或者应用必须与之特定应用进行的互操作的合理必要场景,采取对个人权益影响最小权限的查看应用列表方式。其次,App或SDK在隐私政策中应明确告知QUERY_ALL_PACKAGES权限的方式、目的和范围,声明获取的特定已安装应用程序列表清单,且在特定场景时触发权限(如与特定应用进行互操作时),以弹窗或其他显著方式告知并征得用户的同意。

当然,配置了QUERY_ALL_PACKAGES 权限的应用,目前不参考上述声明与同意方式,也不太会导致App在应用市场上被下架或被通报整改。 对于 Android 11以下环境的App或SDK收集使用已安装应用程序列表的信息,目前主要通过隐私政策告知用户收集使用的目的、方式、范围和场景。但将来可能会渐趋于上述11以上的合规标准。

running gradle task assembledebug stuck

Here is solution in my case.

  1. Open your flutter Project directory.
  2. Change directory to android directory in your flutter project directory cd android
  3. clean gradle ./gradlew clean
  4. Build gradle ./gradlew build or you can combine both commands with just ./gradlew clean build (Thanks @daniel for the tip)
  5. Now run your flutter project. If you use vscode, press F5. First time gradle running assembleDebug will take time.

PS: Delete gradle in case of all that steps don’t work

PANIC: Missing emulator engine program for ‘x86’ CPU.

emulator -avd xx

一直报错:

PANIC: Missing emulator engine program for ‘x86’ CPU.

最终找到原因:

在创建虚拟机的时候,AS会默认推荐下载带Google APIs的x86 Images,由于大陆对google的限制,所以会导致报错。

解决办法,下载不带Google APIs的x86 Images, 然后再重启终端,重新输入命令,成功启动安卓虚拟机。

 

远程连接centos打开Androidstudio空白

For me, this issue was an XRDP issue, fixed in CentOS 7.6 by editing /etc/xrdp/xrdp.ini and changing to max_bpp=24.

 

参考连接:

https://intellij-support.jetbrains.com/hc/en-us/community/posts/115000675024-Blank-configuration-window-

macOS命令行创建Android模拟器

  • macOS下不安装Android Studio
  • 使用VSCode来开发Flutter应用
  • 使用命令行创建和管理Android模拟器设备

avdmanager

avdmanager 是一种命令行工具,可让您通过命令行创建和管理 Android 虚拟设备 (AVD)。借助 AVD,您可以定义要在 Android 模拟器中模拟的 Android 手机、Wear OS 手表或 Android TV 设备的特性。

如果您使用 Android Studio,则无需使用此工具,而可以从 IDE 中创建和管理 AVD。

avdmanager 工具在 Android SDK Tools 软件包(25.3.0 及更高版本)中提供,并且可以在 android_sdk/tools/bin/ 中找到。

macOS命令行创建Android模拟器

avdmanager AVD创建Android模拟器语法

创建新的 AVD。您必须为该 AVD 提供名称,并使用引号括住的 sdk_id(即 “sdk_id”)指定要用于该 AVD 的 SDK 软件包的 ID。例如,以下命令会使用 x86 系统映像(API 级别 25)创建一个名为 test 的 AVD:

下面介绍了其他选项的用法:

  • -c {path|size}:此 AVD 的 SD 卡映像的路径,或要为此 AVD 创建的新 SD 卡映像的大小(以 KB 或 MB 为单位,分别以 K 和 M 表示)。例如,-c path/to/sdcard/ 或 -c 1000M
  • -f:强制创建 AVD。如果需要用同名的新 AVD 覆盖现有的 AVD,请使用此选项。
  • -p path:用于存放此 AVD 的文件的目录所在位置的路径。如果您未指定路径,则会在 ~/.android/avd/ 中创建 AVD。

使用avdmanager建立emulator完整步骤

如果你直接使用上面的语法创建模拟器肯定会报下面的错误:

Error: Package path is not valid. Valid system image paths are:ository…
null

原因是没有相应的软件包,按如下步骤来解决:

一:首先,您需要下载必要的软件包。为x86模拟器下载API 23软件包的示例:

二:然后接受许可协议

三:然后创建您的模拟器

更多命令

更多帮助

Warning: File /Users/root/.android/repositories.cfg could not be loaded.

文件不存在,创建即可:

参考