Android开发遇错记录

2018-09-03  本文已影响0人  望着天数月亮

一.编译版本和测试版本冲突:

Conflict with dependency 'com.android.support:support-annotations' in project ':app'. Resolved versions for app (26.1.0) and test app (27.1.1) differ.编译版本和测试版本冲突

解决办法:在 build.gradle 添加

android {
    ...
  configurations.all {
      resolutionStrategy.force 'com.android.support:support-annotations:27.1.1'
  }
}

dependencies {
    ...
}

二.okhttp数据流关闭

okhttp java.lang.IllegalStateException: closed 因调用response.body().string()后数据流已经关闭。
解决办法:重新创建response

private  class HeaderInterceptor implements Interceptor {
        @Override
        public Response intercept(Chain chain) throws IOException {
            Request request = chain.request()
                    .newBuilder()
                    .addHeader("content-type","application/json;charset=UTF-8")
                    .addHeader("access-token", "")
                    .addHeader("provider","android")
                    .addHeader("clientType","app")
                    .build();
            Response response = chain.proceed(request);
            MediaType contentType = response.body().contentType();
            String content = response.body().string();
            Log.i(TAG,"response = "+content);
            return response.newBuilder().body(ResponseBody.create(contentType,content)).build();
        }
    }

三.三方库的依赖关系

三方库通过远端仓库、本地jar包、library依赖时,在dependencies中会声明三方库的依赖关系。依赖关系如下:

下面是2.x版本依赖的说明,括号里对应的是3.0版本的依赖方式。

compile(api)
这种是我们最常用的方式,使用该方式依赖的库将会参与编译和打包。

provided(compileOnly)
只在编译时有效,不会参与打包,可以在自己的moudle中使用该方式依赖。比如com.android.support,gson这些使用者常用的库,避免冲突。

apk(runtimeOnly)
只在生成apk的时候参与打包,编译时不会参与,很少用。

testCompile(testImplementation)
testCompile 只在单元测试代码的编译以及最终打包测试apk时有效。

debugCompile(debugImplementation)
debugCompile 只在debug模式的编译和最终的debug apk打包时有效。

releaseCompile(releaseImplementation)
releaseCompile 仅仅针对Release模式的编译和最终的Release apk打包。

dependencies {
    implementation files('libs/test.jar') 
    compile project(':test') 
    api files('libs/test.jar') 
    provided 'com.alipay.android.phone.mobilesdk:framework-build:2.5.0.170621123127:api@jar' 
}

四.关于动态库so的使用问题:

java.lang.UnsatisfiedLinkError: No implementation found for int cn.passguard.PassGuardEncrypt.makeKey() (tried Java_cn_passguard_PassGuardEncrypt_makeKey and Java_cn_passguard_PassGuardEncrypt_makeKey__)
提示找不到makeKey()方法的实现,是因为该方法的实现是在so库中的jni方法,jni方法命名中包含包名,而我在引用时包名与jni方法包名不一致,所以提示找不到。

解决方案:
修改so库中的方法名或者把.so库放在.so库接口对应的包名里。

上一篇 下一篇

猜你喜欢

热点阅读