Android项目中如何在Kotlin里读取其他目录的APK文件?
获取APK文件路径的Kotlin实现
针对你的场景,分两种常见情况处理:
1. 本地单元测试(运行在本地JVM)
和你在Node.js中用process.cwd()的逻辑完全一致,Kotlin可以通过System.getProperty("user.dir")获取项目根目录,再拼接APK的相对路径:
class TestUtils { // 获取项目根目录,对应Node.js的process.cwd() private val projectRoot = System.getProperty("user.dir") // 拼接APK完整路径 val apkFile = File("$projectRoot/app/build/outputs/apk/debug/name-app-debug.apk") }
这个方式和你熟悉的Node.js逻辑对齐,只要项目目录结构不变,路径就会保持正确,适合本地运行的单元测试场景。
2. 仪器化测试(运行在真机/模拟器)
如果你的TestUtils.kt是放在androidTest目录下的仪器化测试代码,设备上无法直接访问电脑的build目录,需要额外处理:
- 先通过Gradle任务将APK复制到测试模块的
assets目录 - 然后在测试代码中通过
AssetManager读取文件:
class TestUtils { fun getApkFile(context: Context): File { val assetManager = context.assets val inputStream = assetManager.open("name-app-debug.apk") // 将assets中的文件复制到设备本地存储 val outputFile = File(context.cacheDir, "name-app-debug.apk") inputStream.copyTo(FileOutputStream(outputFile)) return outputFile } }
对应的Gradle配置(在app模块的build.gradle.kts中添加):
tasks.register<Copy>("copyApkToTestAssets") { from("build/outputs/apk/debug/name-app-debug.apk") into("src/androidTest/assets") } // 让测试任务依赖这个复制任务 tasks.named("connectedAndroidTest") { dependsOn("copyApkToTestAssets") }
内容的提问来源于stack exchange,提问作者Krishna
相关产品推荐
相关产品推荐

