我正在Android中运行黄瓜测试,并尝试将报告存储在外部目录中,该目录似乎是/storage/emulated/0/Android/data/<package-name>/files
。
在执行测试期间,我可以看到生成了报告。但是,卸载应用程序后,报告将被删除。我正在使用下面的Gradle任务来复制无效的报告。
gradle.taskGraph.afterTask { task, state ->
if ((task == connectedAndroidTest) || (task == connectedCheck)) {
enter code here def reportDir = new File(project.buildDir, "cucumber-reports")
if (!reportDir.exists()) {
reportDir.mkdirs()
}
println 'Retrieving Cucumber test report to ' + project.buildDir
def processBuilder = new ProcessBuilder(
['adb', 'pull', '/storage/emulated/0/Android/data/<package-name>/files/reports/', reportDir.getAbsolutePath()])
processBuilder.start()
}
}
在删除报告之前,谁能帮助我将报告复制到桌面上。
我尝试将报告存储在其他两个位置,例如/sdcard
,/mnt/sdcard
,/storage/emulated/0
。我没有这些运气。我得到IOException。看来我没有写这些位置的权限。
答案 0 :(得分:0)
因为这些数据是应用程序数据,并且在应用程序的卸载过程中将删除所有应用程序数据。您需要具有在本地存储上写入的权限。
private static final int PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE = 123;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
if(checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED)
{
requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE);
}
else
{
// You have permissions
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults)
{
if((requestCode == PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE) && (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED))
{
// You have permissions
}
}
并且您必须将权限请求添加到您的AndroidManifest.xml
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
如果有权限,您可以写内部存储器。
File file = new File(<SomePath>, <SomeName>);
try (FileOutputStream fos = new FileOutputStream(file))
{
// Save data
}
catch (IOException e)
{
// Error
}