我需要你的帮助来限制 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) 我正在尝试使用清单占位符来删除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)来破解它,但我希望尽可能避免使用它.
有什么建议吗?
我最近将我的项目迁移到 Gradle 7.4.1、Android Gradle Plugin 7.1.2,因此也迁移到 JDK 11(来自 JDK 8),并且一切正常,除了当我在 Android Studio 中以调试模式运行单元测试时,它显示我这个弹出窗口:
\n\n说的是:
\n\n\n目标 JRE 版本 (11.0.11) 与项目 JDK 版本 (版本 1.8.0_242) 不匹配,将使用 JDK 中的源:11
\n
需要明确的是,到目前为止我尝试过的任何其他情况下都不会显示弹出窗口,例如:
\n如下所示,在 Gradle 设置中,我使用 JDK 11(显然;否则该项目根本无法工作):
\n\n我还使用了“选择运行时”插件来确保选择正确的 JDK:
\n\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
我使用 Google Play Developer Console 创建了两个单独的应用程序:
com.myname.app(用于prod风味)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) 我想启动 Appium Inspector 会话以附加到我的设备上当前运行的 Android 应用程序。我面临的问题是,每当我启动会话时,正在运行的应用程序就会被终止并再次启动。有什么办法可以避免这种情况吗?
我目前正在使用以下配置:
{
"appium:automationName": "UiAutomator2",
"platformName": "android",
"appium:app": "/my/path/to/apk",
"appium:noReset": true
}
Run Code Online (Sandbox Code Playgroud)