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文件,文件内容如下:
-
<?xml version="1.0" encoding="utf-8"?>
-
<network-security-config>
-
<base-config cleartextTrafficPermitted="true" />
-
</network-security-config>
2.接着,在AndroidManifest.xml文件下的application标签增加以下属性:
-
<application
-
...
-
android:networkSecurityConfig="@xml/network_security_config"
-
...
-
/>
完成,这个时候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 版本降低。