小编Abd*_*lah的帖子

如何使用String类型生成buildConfigField

在我的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 android-gradle-plugin

125
推荐指数
7
解决办法
6万
查看次数

Android:管理不同的服务器URL以进行开发和发布

我正在开发一个Android应用程序,它通过REST API与服务器交互.显然,我需要使用不同的URL来开发和发布版本.评论和取消评论代码是非常乏味和错误的.

处理这种情况的最佳方法是哪种?在gradle文件中使用不同的构建类型是可以自动化该过程的类型,但我不确定这是否是正确的方法.

构建类型的数量也有增加的可能性.测试,内部释放等

android android-gradle-plugin

18
推荐指数
1
解决办法
9842
查看次数

Android DatePickerDialog:设置选择的最小和最大日期

我知道这有很多问题,但没有一个解决方案适合我,所以这个问题.我想限制用户在今天之前选择日期,但我无法这样做.

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,但没有任何成功.

android android-datepicker

15
推荐指数
3
解决办法
3万
查看次数

androidTest中的活动未被ActivityTestRule启动

我想在测试活动中测试一个片段.我添加TestTragmentActivityandroidTest连同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

12
推荐指数
1
解决办法
6548
查看次数

将布局资源添加到androidTest

我想将layout xml文件添加到我的androidTest文件夹中,仅用于测试.

我添加了res/layout文件夹androidTest并尝试向其添加布局文件.但它给错误URI is not registeredxmlns:android="http://schemas.android.com/apk/res/android"

不知何故,该项目不会将其识别为有效的布局文件.

resources android android-resources android-testing

12
推荐指数
2
解决办法
3479
查看次数

Firebase + RoboElectric:java.lang.IllegalStateException:名称为 [DEFAULT] 的 FirebaseApp 不存在

我在我们的 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 的初始化中遗漏了一些东西

android robolectric firebase

5
推荐指数
1
解决办法
1973
查看次数