我已经使用指南为 firebase 设置了集成测试。我使用以下命令在本地运行相同的测试:
flutter build apk --debug --flavor dev
./gradlew app:assembleDevDebugAndroidTest
./gradlew app:connectedDevDebugAndroidTest -Ptarget=integration_test/main_test.dart
我能够成功运行测试,但如果是新设备或重新安装了应用程序,apk 会请求权限。
我将以下代码添加到
flutter_app/android/app/src/androidTest/java/com/domain/myapp/MainActivityTest.java
以实现GrantPermissionRule,如上所述,但它仍然不起作用。
@RunWith(FlutterTestRunner.class)
public class MainActivityTest {
@Rule
public ActivityTestRule<MainActivity> rule = new ActivityTestRule<>(MainActivity.class, true, false);
@Rule
public GrantPermissionRule mRuntimePermissionRule =
GrantPermissionRule.grant(android.Manifest.permission.READ_EXTERNAL_STORAGE,
android.Manifest.permission.WRITE_EXTERNAL_STORAGE,
android.Manifest.permission.READ_PHONE_STATE,
android.Manifest.permission.READ_MEDIA_VIDEO,
android.Manifest.permission.READ_MEDIA_IMAGES,
android.Manifest.permission.ACCESS_COARSE_LOCATION,
android.Manifest.permission.CAMERA,
android.Manifest.permission.ACCESS_FINE_LOCATION
);
}
import 'dart:io';
import 'package:integration_test/integration_test_driver.dart';
future<void> main() async {
final adbPath = path.join(
androidHomePath,
'platform-tools',
Platform.isWindows ? 'adb.exe' : 'adb',
);
await process.run(
'adbPath',
[
'shell',
'pm',
'grant',
'com.example.<your app name>', // todo: update this
'android.permission.access_coarse_location'
],
);
await process.run(
'adbPath',
[
'shell',
'pm',
'grant',
'com.example.<your app name>', // todo: update this
'android.permission.READ_CONTACTS'
],
);
// todo: add more permissions as required
await integrationdriver();
}