小编xor*_*ate的帖子

Docker中安装的Android SDK工具失败

我正在尝试使用Shippable创建一个可用于构建Android项目的docker镜像.

问题是android update sdk命令,它给出以下错误:

Installing Android SDK Tools, revision 24.2
  Failed to rename directory /opt/android-sdk-linux/tools to /opt/android-sdk-linux/temp/ToolPackage.old01.
  Failed to create directory /opt/android-sdk-linux/tools
Run Code Online (Sandbox Code Playgroud)

我在这里找到了一些解决方案:https://stackoverflow.com/a/8839359/867099但它适用于Windows,似乎没有解决linux上的问题.似乎在更新命令期间,当前目录正在使用中,因此无法重命名.

使用该工作方法提示我的解决方法是:

RUN cp -r /opt/android-sdk-linux/tools /opt/android-sdk-linux/tools_copy

RUN cd /opt/android-sdk-linux/tools && echo 'y' | /opt/android-sdk-linux/tools_copy/android update sdk --no-ui -a --filter tools,platform-tools,build-tools-22.0.1,android-21,extra-android-support,extra-google-google_play_services --force
Run Code Online (Sandbox Code Playgroud)

为了自动接受许可证,我echo 'y'去了android命令.

但我认为该android命令也应该在正确的目录中运行,这就是我cd首先进入它的原因.

但是,它仍然失败.我很难解决如何解决这个问题,所以任何帮助都表示赞赏.

------更新--------

我在android sdk update没有tools过滤器的情况下运行命令,最后,我的gradle构建成功.所以我不确定不更新它们是否有问题......

android android-sdk-tools docker

11
推荐指数
2
解决办法
2974
查看次数

如何在不添加特定代码的情况下处理auth0 403错误(Retrofit/okhttp/RxAndroid)

我正在使用Auth0,它给了我一个JWT(json web令牌)和一个refreshtoken.我在http标头中使用此JWT与我的后端进行通信.

403当它确定JWT已经过期时,它可能会发生,服务器给我一个.在这种情况下,我可以让Auth0使用refreshtoken向我发出一个新的JWT.这意味着我调用Auth0后端,将它传递给refreshtoken,它给了我一个新的JWT,然后我可以在我的请求中使用它.

我的问题是,如何在我的所有网络代码中有效地编写此行为?我将有几个端点可以交谈,他们都可以返回403.

我想我应该首先制作一个拦截器,将JWT添加到所有请求中.

然后应该有检测403的行为,静静地对Auth0进行网络调用,检索新的JWT.然后应该再次尝试原始请求,并在其标题中添加新的JWT.

所以我更希望将403处理到我的其他代码看不到的地方,并且绝对不必在任何地方重写它.

任何关于如何实现这一点的指示将不胜感激.

-

要清楚,我基本上是在寻找如何使用RxAndroid Observables实现这一目标的指针.当某个Observable找到403时,它应该"注入"一个新的网络呼叫.

android rx-java retrofit okhttp auth0

10
推荐指数
1
解决办法
6239
查看次数

Android gradle apk拆分,设置versionCode

我正在尝试将应用程序拆分为abi特定的apks,但所有apks的版本号都是相同的.他们需要不同才能上传到游戏商店.我错过了什么吗?

splits {
    abi {
        enable true
        reset()
        include 'x86', 'armeabi', 'armeabi-v7a', 'arm64-v8a'
        universalApk true
    }
}
Run Code Online (Sandbox Code Playgroud)

android android-gradle-plugin

9
推荐指数
1
解决办法
2815
查看次数

RxJava的.debounce()干扰了我的Observable的线程和错误处理

我想在我的Android应用程序中进行标准搜索,我在其中输入EditText,等待用户完成输入,然后使用Retrofit启动网络请求:

// make observable out of EditText
Observable<OnTextChangeEvent> textObs = WidgetObservable.text(searchText);

mSearchResultSubscription =
    textObs

        // wait until user has not typed for 350 milliseconds
        .debounce(350, TimeUnit.MILLISECONDS)

        // get the string the user typed
        .map(OnTextChangeEvent::text)
        .map(CharSequence::toString)

        // start a new observable (from Retrofit)
        .flatMap(
            q ->
                // try network call and return my data
                MyRetrofitAPI.getService().search(q)

                    // if this fails, just return empty observable
                    .onErrorResumeNext(error -> {
                        Log.e("Error from retrofit: " + error.getLocalizedMessage());
                        return Observable.empty();
                    })

        )

        // if all …
Run Code Online (Sandbox Code Playgroud)

multithreading android rx-java retrofit rx-android

7
推荐指数
2
解决办法
4562
查看次数

在RxJava中,如何在出错时重试/恢复,而不是完成observable

我想要实现的是:

  • 监控某个变化的偏好
  • 检测到更改时,使用新值启动新的网络呼叫
  • 转换结果
  • 在UI中显示结果

我知道变化何时发生,现在我假设我需要在主题上调用onNext.然后应该触发一个Rx链,最后我可以更新UI.

mViewPeriodSubject = PublishSubject.create();

mAdapterObservable =
    mViewPeriodSubject
        .flatMap(period -> MyRetrofitAPI.getService().fetchData(period)) // this might fail
        .flatMap(Observable::from)
        .map(MyItem::modifyItem)
        .toList()
        .map(obj -> new MyAdapter(obj));


mViewPeriodSubject.onNext("week"); // this one starts the chain
mViewPeriodSubject.onNext("year"); // this one does not
Run Code Online (Sandbox Code Playgroud)

但是在网络调用失败的情况下,可观察的错误和调用onNext()不会导致另一个网络调用.

所以我的问题是,我该如何处理?我怎样才能保持Observable完好无损,这样我就可以为它抛出另一个值?我可以想象一个简单的重试按钮,它只是想忽略发生错误的事实.

java android rx-java rx-android

6
推荐指数
1
解决办法
4425
查看次数

RxAndroid ViewObservable NetworkOnMainThreadException

我有一个Button我创建的Observable<OnClickEvent>.

单击按钮时,我希望从网络中获取文件,但是我遇到了有关网络和线程的问题.

这个例子抛出android.os.NetworkOnMainThreadException:

Observable<OnClickEvent> networkButtonObservable = ViewObservable.clicks(testNetworkButton);
networkButtonObservable
    .map(new Func1<OnClickEvent, List<String>>() {
             @Override
             public List<String> call(OnClickEvent onClickEvent) {
                 return TestAPI.getTestService().fetchTestResponse();
             }
         }
    )
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe(new Action1<Object>() {
                   @Override
                   public void call(Object o) {Log.w("Final result: " + o);
                   }
               }
    );
Run Code Online (Sandbox Code Playgroud)

所以我尝试从另一个线程.

以下抛出rx.exceptions.OnErrorNotImplementedException: Observers must subscribe from the main UI thread, but was Thread[RxNewThreadScheduler-1,5,main]:

networkButtonObservable
    .subscribeOn(Schedulers.newThread())
    .map(new Func1<OnClickEvent, List<String>>() {
             @Override
             public List<String> call(OnClickEvent onClickEvent) {
                 return TestAPI.getTestService().fetchTestResponse();
             }
         }
    )
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe(new …
Run Code Online (Sandbox Code Playgroud)

multithreading android rx-java rx-android

3
推荐指数
1
解决办法
2489
查看次数