小编And*_*ost的帖子

Docker 容器中的 Gradle 构建占用太多内存

我需要你的帮助来限制 Gradle 构建在构建机器上占用的内存量。我尝试构建一个包含近 100 个模块的 Android 项目,其中包括一个com.android.application模块和许多com.android.library. 单个 Gradle 命令同时执行构建、lint 和测试(如果重要的话,还包括 Robolectric 测试)。

我在基于jetbrains/teamcity-agent的 Docker 容器中运行构建。容器被限制为仅使用 64GB 主机 RAM 中的 10GB 使用mem_limit选项。

构建最近开始失败,因为它们占用了太多内存,并且其中一个进程被主机杀死,我可以通过在主机上运行看到dmesg。它可能看起来像这样:

[3377661.066812] Task in /docker/3e5e65a5f99a27f99c234e2c3a4056d39ef33f1ee52c55c4fde42ce2f203942f killed as a result of limit of /docker/3e5e65a5f99a27f99c234e2c3a4056d39ef33f1ee52c55c4fde42ce2f203942f
[3377661.066816] memory: usage 10485760kB, limit 10485760kB, failcnt 334601998
[3377661.066817] memory+swap: usage 0kB, limit 9007199254740988kB, failcnt 0
[3377661.066818] kmem: usage 80668kB, limit 9007199254740988kB, failcnt 0
[3377661.066818] Memory cgroup stats for /docker/3e5e65a5f99a27f99c234e2c3a4056d39ef33f1ee52c55c4fde42ce2f203942f: cache:804KB rss:10404288KB rss_huge:0KB shmem:0KB mapped_file:52KB …
Run Code Online (Sandbox Code Playgroud)

java android gradle kotlin docker

20
推荐指数
1
解决办法
1254
查看次数

无法使用清单占位符来删除权限

我正在尝试使用清单占位符来删除for发布版本中的uses-permission节点AndroidManifest.xml而没有运气.

的build.gradle

buildTypes {
    release {
        manifestPlaceholders.excludeDebugPermissions = "remove"
    }
    debug {
        manifestPlaceholders.excludeDebugPermissions = "merge"
    }
}
Run Code Online (Sandbox Code Playgroud)

AndroidManifest.xml中

<uses-permission
    android:name="android.permission.SYSTEM_ALERT_WINDOW"
    tools:node="${excludeDebugPermissions}" />
Run Code Online (Sandbox Code Playgroud)

它会产生如下错误:

错误:任务':app:processDebugManifest'的执行失败.没有枚举常量com.android.manifmerger.NodeOperationType.$ {EXCLUDE_DEBUG_PERMISSIONS}

但是在其他任何地方使用占位符都能正常工作(合并后的清单是正常的并且没有错误),例如

<uses-permission
    android:name="${excludeDebugPermissions}"
    tools:node="remove" />
Run Code Online (Sandbox Code Playgroud)

所以我认为该tools:node属性不支持清单占位符,我可能会通过替换权限名称而不是节点标记(merge/ remove)来破解它,但我希望尽可能避免使用它.

有什么建议吗?

android android-manifest android-gradle-plugin

10
推荐指数
1
解决办法
1227
查看次数

Android Studio - 目标 JRE 版本与项目 JDK 版本不匹配

我最近将我的项目迁移到 Gradle 7.4.1、Android Gradle Plugin 7.1.2,因此也迁移到 JDK 11(来自 JDK 8),并且一切正常,除了当我在 Android Studio 中以调试模式运行单元测试时,它显示我这个弹出窗口:

\n

目标 JRE 版本 (11.0.11) 与项目 JDK 版本 (版本 1.8.0_242) 不匹配,将使用 JDK 中的源:11

\n

说的是:

\n
\n

目标 JRE 版本 (11.0.11) 与项目 JDK 版本 (版本 1.8.0_242) 不匹配,将使用 JDK 中的源:11

\n
\n

需要明确的是,到目前为止我尝试过的任何其他情况下都不会显示弹出窗口,例如:

\n
    \n
  • 构建应用程序
  • \n
  • 在调试模式下运行应用程序
  • \n
  • 在没有调试模式的情况下运行单元测试。
  • \n
\n

如下所示,在 Gradle 设置中,我使用 JDK 11(显然;否则该项目根本无法工作):

\n

Android Studio 中的 Gradle 设置显示 JDK 11

\n

我还使用了“选择运行时”插件来确保选择正确的 JDK:

\n

选择运行时插件显示 JDK 11

\n

我的环境变量也正确:

\n
\xe2\x9d\xaf echo $JAVA_HOME\n/Users/azabost/JetBrainsToolbox/apps/AndroidStudio/ch-3/211.7628.21.2111.8193401/Android Studio.app/Contents/jre/Contents/Home\n\n\xe2\x9d\xaf which java\n/Users/azabost/JetBrainsToolbox/apps/AndroidStudio/ch-3/211.7628.21.2111.8193401/Android Studio.app/Contents/jre/Contents/Home/bin/java\n\n\xe2\x9d\xaf java -version\nopenjdk version "11.0.11" 2021-04-20\nOpenJDK Runtime Environment (build 11.0.11+0-b60-7590822)\nOpenJDK 64-Bit Server VM (build 11.0.11+0-b60-7590822, mixed mode)\n\n\xe2\x9d\xaf …
Run Code Online (Sandbox Code Playgroud)

android intellij-idea kotlin android-studio gradle-kotlin-dsl

6
推荐指数
0
解决办法
1252
查看次数

同一设备上的应用程序的两种风格

我使用 Google Play Developer Console 创建了两个单独的应用程序:

  • 带有 ID 的“MyApp” com.myname.app(用于prod风味)
  • 带有 ID 的“MyApp Stage” com.myname.appStage(用于stage风味)

我在 gradle 中使用com.github.triplet.play任务将这些风格部署到相应的 beta 频道。

当我尝试在同一台设备上安装这两种口味时,Google Play 给了我error: -505. 如果我卸载第一个安装的版本,那么我可以成功安装第二个。

正如我在本教程中看到的那样,它应该足够了。

任何想法有什么问题?

这是我的 gradle 脚本片段:

def getGoogleApiJsonFile() {
    (...)
}
android {
    (...)

    defaultConfig {
        applicationId "com.myname"
        (...)
    }
    buildTypes {
        release {
            (...)
            signingConfig signingConfigs.release
        }
    }
    productFlavors {
        prod {
            applicationIdSuffix '.app'
        }
        stage {
            applicationIdSuffix '.appStage'
        }
        dev …
Run Code Online (Sandbox Code Playgroud)

android gradle apk google-play

5
推荐指数
1
解决办法
2057
查看次数

如何避免在启动 Appium Inspector 会话时杀死正在运行的应用程序?

我想启动 Appium Inspector 会话以附加到我的设备上当前运行的 Android 应用程序。我面临的问题是,每当我启动会话时,正在运行的应用程序就会被终止并再次启动。有什么办法可以避免这种情况吗?

我目前正在使用以下配置:

{
  "appium:automationName": "UiAutomator2",
  "platformName": "android",
  "appium:app": "/my/path/to/apk",
  "appium:noReset": true
}
Run Code Online (Sandbox Code Playgroud)

appium appium-android

1
推荐指数
1
解决办法
1698
查看次数