android 错误集锦

1,NoSuchFieldError: No static field listView1 of type I in class Lcom/disdemo/R$id; or its superclasses

I have module1 (in Android Studio) with listView1 in activity_main.xml (present in res of the module1). The MainActivity of this module is being launched from another module2 in the same Android Studio project.

原因:两个module中layout布局文件名称一致了。

2,Android Cleartext HTTP traffic to xxx not permitted 解决方法

为保证用户数据和设备的安全,Google针对下一代 Android 系统(Android P) 的应用程序,将要求默认使用加密连接,这意味着 Android P 将禁止 App 使用所有未加密的连接,因此运行 Android P 系统的安卓设备无论是接收或者发送流量,未来都不能明码传输,需要使用下一代(Transport Layer Security)传输层安全协议,而 Android Nougat 和 Oreo 则不受影响。

因此在Android P 使用HttpUrlConnection进行http请求会出现以下异常

 W/System.err: java.io.IOException: Cleartext HTTP traffic to **** not permitted

使用OKHttp请求则出现

java.net.UnknownServiceException: CLEARTEXT communication ** not permitted by network security policy

在Android P系统的设备上,如果应用使用的是非加密的明文流量的http网络请求,则会导致该应用无法进行网络请求,https则不会受影响,同样地,如果应用嵌套了webview,webview也只能使用https请求。

针对这个问题,有以下三种解决方法:

(1)APP改用https请求

(2)targetSdkVersion 降到27以下

(3)更改网络安全配置

前面两个方法容易理解和实现,具体说说第三种方法,更改网络安全配置。

1.在res文件夹下创建一个xml文件夹,然后创建一个network_security_config.xml文件,文件内容如下:

  1. <?xml version="1.0" encoding="utf-8"?>

  2. <network-security-config>

  3. <base-config cleartextTrafficPermitted="true" />

  4. </network-security-config>

2.接着,在AndroidManifest.xml文件下的application标签增加以下属性:

  1. <application

  2. ...

  3. android:networkSecurityConfig="@xml/network_security_config"

  4. ...

  5. />

完成,这个时候App就可以访问网络了。

3,java.lang.IllegalArgumentException: Failed to find configured root that contains /storage/emulated/0/Android/data/com.netring.edz.kartuapplication/cache/com.ss.android.article.news_636.apk

com.netring.edz.kartuapplication W/System.err:     at  android.support.v4.content.FileProvider$SimplePathStrategy.getUriForFile(FileProvider.java:739)

第一步,指定一个FileProvider。在AndroidManifest.xml中声明一个条目

 <provider
            android:name="android.support.v4.content.FileProvider"
            android:authorities="com.example.myapp.fileprovider"
            android:grantUriPermissions="true"
            android:exported="false">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/filepaths" />
        </provider>

 

第二步,指定想分享的目录。在res目录下新建一个xml目录,在xml目录下面新建一个xml文件。我新建的文件名叫filepaths.xml

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">

    <!--代表外部存储区域的根目录下的文件 Environment.getExternalStorageDirectory()/DCIM/camerademo目录-->
    <external-path name="hm_DCIM" path="DCIM/camerademo" />
    <!--代表外部存储区域的根目录下的文件 Environment.getExternalStorageDirectory()/Pictures/camerademo目录-->
    <external-path name="hm_Pictures" path="Pictures/camerademo" />
    <!--代表app 私有的存储区域 Context.getFilesDir()目录下的images目录 /data/user/0/com.hm.camerademo/files/images-->
    <files-path name="hm_private_files" path="images" />
    <!--代表app 私有的存储区域 Context.getCacheDir()目录下的images目录 /data/user/0/com.hm.camerademo/cache/images-->
    <cache-path name="hm_private_cache" path="images" />
    <!--代表app 外部存储区域根目录下的文件 Context.getExternalFilesDir(Environment.DIRECTORY_PICTURES)目录下的Pictures目录-->
    <!--/storage/emulated/0/Android/data/com.hm.camerademo/files/Pictures-->
    <external-files-path name="hm_external_files" path="Pictures" />
    <!--代表app 外部存储区域根目录下的文件 Context.getExternalCacheDir目录下的images目录-->
    <!--/storage/emulated/0/Android/data/com.hm.camerademo/cache/images-->
    <external-cache-path name="hm_external_cache" path="" />
</paths>


4,[kapt] Incremental annotation processing requested, but support is disabled because the following processors are not incremental: 
butterknife.compiler.ButterKnifeProcessor (NON_INCREMENTAL), 
io.objectbox.processor.ObjectBoxProcessorShim (NON_INCREMENTAL).

原因:这是 kotlin-gradle-plugin 1.3.50 版本的一个bug。

解决办法:gradle.properties 文件中添加 kapt.incremental.apt = false 来禁用增量注解处理 或者 将 kotlin_version 版本降低。

发布了74 篇原创文章 · 获赞 36 · 访问量 25万+

猜你喜欢

转载自blog.csdn.net/kdsde/article/details/100101498