在我的Android Studio
项目中有两个build configuration
有一些buildConfigField
:
buildTypes {
def SERVER_URL = "SERVER_URL"
def APP_VERSION = "APP_VERSION"
debug {
buildConfigField "String", SERVER_URL, "http://dev.myserver.com"
buildConfigField "String", APP_VERSION, "0.0.1"
}
release {
buildConfigField "String", SERVER_URL, "https://myserver.com"
buildConfigField "String", APP_VERSION, "0.0.1"
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
Run Code Online (Sandbox Code Playgroud)
我得到的错误如下:
/path/to/generated/BuildConfig.java
Error:(14, 47) error: ';' expected
Error:(15, 47) error: ';' expected
Run Code Online (Sandbox Code Playgroud)
生成的BuildCofig.java如下:
public final class BuildConfig {
public static final boolean DEBUG = Boolean.parseBoolean("true");
public static final String APPLICATION_ID = "com.mycuteoffice.mcoapp";
public …
Run Code Online (Sandbox Code Playgroud) 我正在开发一个Android应用程序,它通过REST API与服务器交互.显然,我需要使用不同的URL来开发和发布版本.评论和取消评论代码是非常乏味和错误的.
处理这种情况的最佳方法是哪种?在gradle文件中使用不同的构建类型是可以自动化该过程的类型,但我不确定这是否是正确的方法.
构建类型的数量也有增加的可能性.测试,内部释放等
我知道这有很多问题,但没有一个解决方案适合我,所以这个问题.我想限制用户在今天之前选择日期,但我无法这样做.
public class DatePickerDialogFragment extends DialogFragment {
private OnDateSetListener listener;
public void setListener(OnDateSetListener listener) {
this.listener = listener;
}
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DAY_OF_MONTH);
DatePickerDialog dialog = new DatePickerDialog(getContext(), listener, year, month, day);
dialog.getDatePicker().setMinDate(calendar.getTimeInMillis());
return dialog;
}
}
Run Code Online (Sandbox Code Playgroud)
我表现为:
DatePickerDialogFragment fragment = new DatePickerDialogFragment();
fragment.setListener(dateSetListener);
fragment.show(getSupportFragmentManager(), "Choose booking date");
Run Code Online (Sandbox Code Playgroud)
我希望用户不应该在今天之前选择日期.正如你所看到的,我setMinDate()
用今天的时间调用了方法,但它没有效果.该对话框显示今天之前的日期为灰色但可选择.
我也尝试按照一些stackoverflow答案中的建议进行子类DatePickerDialog
和覆盖onDateChanged
,但没有任何成功.
我想在测试活动中测试一个片段.我添加TestTragmentActivity
到androidTest
连同AndroidManifest.xml
文件.但是,当我尝试通过ActivityTestRule
它使用此活动时,会出现以下错误:
java.lang.RuntimeException: Could not launch activity
at android.support.test.runner.MonitoringInstrumentation.startActivitySync(MonitoringInstrumentation.java:371)
at android.support.test.rule.ActivityTestRule.launchActivity(ActivityTestRule.java:219)
at com.bbm.ui.fragments.StickerPackListFragmentTest.testEmpty(StickerPackListFragmentTest.java:29)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at android.support.test.internal.statement.UiThreadStatement.evaluate(UiThreadStatement.java:55)
at android.support.test.rule.ActivityTestRule$ActivityStatement.evaluate(ActivityTestRule.java:270)
at org.junit.rules.RunRules.evaluate(RunRules.java:20)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runners.Suite.runChild(Suite.java:128)
at org.junit.runners.Suite.runChild(Suite.java:27)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at org.junit.runner.JUnitCore.run(JUnitCore.java:115)
at android.support.test.internal.runner.TestExecutor.execute(TestExecutor.java:59)
at …
Run Code Online (Sandbox Code Playgroud) android unit-testing junit-runner android-espresso android-instrumentation
我想将layout xml文件添加到我的androidTest
文件夹中,仅用于测试.
我添加了res/layout
文件夹androidTest
并尝试向其添加布局文件.但它给错误URI is not registered
的xmlns:android="http://schemas.android.com/apk/res/android"
不知何故,该项目不会将其识别为有效的布局文件.
我在我们的 android 应用程序中使用Firebase进行远程配置。下面是在我的应用程序类onCreate方法中完成的初始化:
FirebaseRemoteConfig remoteConfig = FirebaseRemoteConfig.getInstance();
FirebaseRemoteConfigSettings settings = new FirebaseRemoteConfigSettings.Builder()
.setDeveloperModeEnabled(BuildConfig.DEBUG)
.build();
remoteConfig.setConfigSettings(settings);
setFirebaseDefault();
Map<String, Object> defaults = new HashMap<>();
defaults.put(FirebaseConstantsKt.BREAKING_NEWS, "");
defaults.put(FirebaseConstantsKt.ENABLE_BREAKING_NEWS, false);
FirebaseRemoteConfig.getInstance().setDefaults(defaults);
Run Code Online (Sandbox Code Playgroud)
根据这个答案,我的build.gradle
文件中还有以下行:
apply plugin: 'com.google.gms.google-services'
Run Code Online (Sandbox Code Playgroud)
当我运行应用程序时,它工作正常,但是当我尝试运行我的 Roboelectric 测试用例时,它崩溃并出现以下异常:
java.lang.IllegalStateException:名称为 [DEFAULT] 的 FirebaseApp 不存在。在 com.google.firebase.FirebaseApp.getInstance(Unknown Source) 在 com.google.firebase.FirebaseApp.getInstance(Unknown Source) 在 com.google.firebase.remoteconfig.FirebaseRemoteConfig.getInstance(Unknown Source) 在 com.woi.apppackage .android.MyApplication.initFirebase(MyApplication.java:225) at com.woi.apppackage.android.MyApplication.onCreate(MyApplication.java:107) at org.robolectric.internal.ParallelUniverse.setUpApplicationState(ParallelUniverse.java:140) at org.robolectric.RobolectricTestRunner.setUpApplicationState(RobolectricTestRunner.java:433) 在 org.robolectric.RobolectricTestRunner$2.evaluate(RobolectricTestRunner.java:240) 在 org。
该测试与 Firebase 无关。如果我在onCreate
测试中注释掉 Firebase 代码运行良好。我想我在 Firebase 的初始化中遗漏了一些东西