Orb*_*bit 7 android realm gradle build.gradle android-gradle-plugin
Realm提供了一个名为"Realm Studio"的数据库查看器,允许用户浏览其数据库的内容.当应用程序用于查看数据库时,它会在数据库目录中创建几个"临时"文件,即:
.realm.lock文件..realm.note文件..realm.management目录包含:
access_control.control.mx文件.access_control.new_commit.cv文件.access_control.pick_writer.cv文件.access_control.write.mx文件.在Android环境中,通过将数据库放在/assets目录中,有时会将预先存在的Realm数据库与应用程序一起提供.因此,当使用Realm Studio查看此数据库时,将生成上述文件/assets.由于未知原因,这会导致Gradle在:app:generateDebugAssets任务之后无限期挂起,显然是在:app:mergeDebugAssets任务中.
因此,我想找到一种方法从构建中排除这些文件.我尝试了几种方法,例如:
applicationVariants.all { variant ->
if (variant.buildType.name == 'debug') {
variant.mergeAssets.doLast {
delete(fileTree(dir: variant.mergeAssets.outputDir, includes: ['**/*.cv', '**/*.mx', '**/*.lock', '**/*.note']))
}
}
}
Run Code Online (Sandbox Code Playgroud)
和其他方法,如:
sourceSets.main.assets.exclude 'appData.realm.management'
sourceSets.main.assets.exclude 'appData.realm.management/access_control.control.mx'
sourceSets.main.assets.exclude 'appData.realm.management/access_control.new_commit.cv'
sourceSets.main.assets.exclude 'appData.realm.management/access_control.pick_writer.cv'
sourceSets.main.assets.exclude 'appData.realm.management/access_control.write.mx'
sourceSets.main.assets.exclude 'appData.realm.lock'
sourceSets.main.assets.exclude 'appData.realm.note'
Run Code Online (Sandbox Code Playgroud)
无济于事.
如何在运行构建时指示Gradle排除这些文件?
编辑:重复输出的小片段./gradlew -d app:mergeDebugAssets:
[org.gradle.cache.internal.DefaultFileLockManager] Waiting to acquire shared lock on daemon addresses registry.
[org.gradle.cache.internal.DefaultFileLockManager] Lock acquired on daemon addresses registry.
[org.gradle.cache.internal.DefaultFileLockManager] Releasing lock on daemon addresses registry.
[org.gradle.cache.internal.DefaultFileLockManager] Waiting to acquire shared lock on daemon addresses registry.
[org.gradle.cache.internal.DefaultFileLockManager] Lock acquired on daemon addresses registry.
[org.gradle.cache.internal.DefaultFileLockManager] Releasing lock on daemon addresses registry.
[org.gradle.process.internal.health.memory.MemoryManager] Emitting OS memory status event {Total: 8589934592, Free: 2572066816}
[org.gradle.launcher.daemon.server.health.LowMemoryDaemonExpirationStrategy] Received memory status update: {Total: 8589934592, Free: 2572066816}
[org.gradle.process.internal.health.memory.MemoryManager] Emitting JVM memory status event {Maximum: 1431830528, Committed: 308281344}
[org.gradle.process.internal.health.memory.MemoryManager] Emitting OS memory status event {Total: 8589934592, Free: 2567909376}
[org.gradle.launcher.daemon.server.health.LowMemoryDaemonExpirationStrategy] Received memory status update: {Total: 8589934592, Free: 2567909376}
[org.gradle.process.internal.health.memory.MemoryManager] Emitting JVM memory status event {Maximum: 1431830528, Committed: 308281344}
[org.gradle.launcher.daemon.server.Daemon] DaemonExpirationPeriodicCheck running
[org.gradle.cache.internal.DefaultFileLockManager] Waiting to acquire shared lock on daemon addresses registry.
[org.gradle.cache.internal.DefaultFileLockManager] Lock acquired on daemon addresses registry.
[org.gradle.cache.internal.DefaultFileLockManager] Releasing lock on daemon addresses registry.
[org.gradle.cache.internal.DefaultFileLockManager] Waiting to acquire shared lock on daemon addresses registry.
[org.gradle.cache.internal.DefaultFileLockManager] Lock acquired on daemon addresses registry.
[org.gradle.cache.internal.DefaultFileLockManager] Releasing lock on daemon addresses registry.
[org.gradle.process.internal.health.memory.MemoryManager] Emitting OS memory status event {Total: 8589934592, Free: 2564087808}
[org.gradle.launcher.daemon.server.health.LowMemoryDaemonExpirationStrategy] Received memory status update: {Total: 8589934592, Free: 2564087808}
[org.gradle.process.internal.health.memory.MemoryManager] Emitting JVM memory status event {Maximum: 1431830528, Committed: 308281344}
[org.gradle.process.internal.health.memory.MemoryManager] Emitting OS memory status event {Total: 8589934592, Free: 2560860160}
[org.gradle.launcher.daemon.server.health.LowMemoryDaemonExpirationStrategy] Received memory status update: {Total: 8589934592, Free: 2560860160}
[org.gradle.process.internal.health.memory.MemoryManager] Emitting JVM memory status event {Maximum: 1431830528, Committed: 308281344}
[org.gradle.launcher.daemon.server.Daemon] DaemonExpirationPeriodicCheck running
[org.gradle.cache.internal.DefaultFileLockManager] Waiting to acquire shared lock on daemon addresses registry.
[org.gradle.cache.internal.DefaultFileLockManager] Lock acquired on daemon addresses registry.
...
Run Code Online (Sandbox Code Playgroud)
我认为问题是你没有删除.realm.management目录.
android {
...
applicationVariants.all { variant ->
if (variant.buildType.name == 'debug') {
variant.mergeAssets.doLast {
delete(fileTree(dir: variant.mergeAssets.outputDir, includes: ['**/.realm.management', '**/*.lock', '**/*.note']))
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
资产目录内容:
apk中的资产目录内容:
猜测你可能正在使用较旧版本的Realm Studio,因为根据问题#842和pull请求#847,这些目录应该同时被正确清理 - 并且还报告,如果没有 - 而不是拖延.当前版本3.12应该已经修复(基本上是6月18日之后的任何版本).如果这不应该有帮助,你可以做的最好的事情是在问题#842下报告; 或提交一个新问题,引用问题#842.还检查文件系统权限,允许运行gradle的用户在那里删除; 手动移动文件"可能"帮助,因此当前用户可以重新创建它们,然后可以删除自己的文件.
使用gradle的两种方法都是变通方法 - 因为它不应该首先发生.
为了获得更多信息"为什么它停止",在终端中运行此命令:
./gradlew -d app:generateDebugAssets
Run Code Online (Sandbox Code Playgroud)
分别在Windows上(问题既不表示OS也不表示Realm Studio版本):
gradlew.bat -d app:generateDebugAssets
Run Code Online (Sandbox Code Playgroud)
编辑:甚至可以在每次构建之前删除这些文件:
task cleanupRealm(type: Delete) {
delete project.projectDir.path + "/src/main/assets/.realm.management"
delete project.projectDir.path + "/src/main/assets/appData.realm.lock"
delete project.projectDir.path + "/src/main/assets/appData.realm.note"
}
tasks.whenTaskAdded { task ->
if (task.name == "preDebugBuild" || task.name == "preReleaseBuild") {
task.dependsOn cleanupRealm
}
}
Run Code Online (Sandbox Code Playgroud)
它将任务图更改为:
:app:checkDebugClasspath
:app:cleanupRealm
:app:preBuild
:app:preDebugBuild
Run Code Online (Sandbox Code Playgroud)
尝试一下:
android {
aaptOptions {
ignoreAssetsPattern "!*.cv:!*.mx:!*.lock:!*.note"
}
}
Run Code Online (Sandbox Code Playgroud)
从文件夹aapt中的二进制文件build-tools:
./aapt
[...]
--ignore-assets
Assets to be ignored. Default pattern is:
!.svn:!.git:!.ds_store:!*.scc:.*:<dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
387 次 |
| 最近记录: |