安卓开发中常见的一些问题处理

这是我参与11月更文挑战的第24天,活动详情查看:2021最后一次更文挑战

解决Android Studio无法导入android.support.v4.app.Fragment

问题:

运行别人的项目的时候代码中的 import android.support.v4.app.Fragment 显示灰色,就是没导进来,参考网上的方法依次点击:

解决方法:

File -> Product Structure -> Dependencies ->

选中项目 -> 点击 + 号 -> Library Dependency -> 搜索 support-v4 ->

选择com.android.support -> 选择合适的版本点 OK

如果无效,import android.support.v4.app.Fragment 还是灰色的,往下继续看:

因为较新版的安卓默认使用 androidx 的包,摒弃了以前的 support 包 如果开启了自动导包,使用 ViewPager + fragment 的时候会自动导入 androidx 的包

import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentPagerAdapter;
import androidx.viewpager.widget.ViewPager;
复制代码

解决办法:取消默认使用androidx包

把视图切换到project,到gradle.prooerties里把

android.useAndroidX=true
android.enableJetifier=true
复制代码

改为

android.useAndroidX=false
android.enableJetifier=false
复制代码

或直接删掉这两句。

改完之后其他androidx开头的包也要改为 support 的。

如 AppCompatActivity 的包要改为

import android.support.v7.app.AppCompatActivity;
复制代码

TransformDexArchiveWithExternalLibsDexMergerForDebug 解决方法

问题:

Android 项目运行的时候报了这个错误

transformDexArchiveWithExternalLibsDexMergerForDebug 错误下面显示的是 com.google.gson.JsonSyn错误

解决方法:

File | Settings | Build, Execution, Deployment | Instant Run

​ 取消勾选,禁用项目中的即时运行,问题解决!



WindowManager$BadTokenException: Unable to add window ... 原因及解决方法

问题描述:

程序是用来打开手机摄像头的,但是运行软件的时候报 WindowManager$BadTokenException 并且软件强制退出

问题原因:

安卓版本6.0以上会因为SYSTEM_ALERT_WINDOW权限的问题,无法在最上层显示,调试的时候就会出现这个异常

解决方法:

简单方法:调安卓版本,在 build.gradle 中将 targetSdkVersion 调成 22 ,问题解决

其他方法:在 onCreate() 方法中添加以下代码

       //让用户手动授权 
       if (Build.VERSION.SDK_INT >= 23) {
            if (!Settings.canDrawOverlays(MainActivity.this)) {
                Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
                        Uri.parse("package:" + getPackageName()));
                startActivity(intent);
            }
        }
复制代码


java.net.UnknownServiceException: CLEARTEXT... 解决办法

问题:

在调用远程接口,进行网络通信的时候,报了如下错误:

W/System.err: java.net.UnknownServiceException:  CLEARTEXT communication to xxx.xxx.xxx not permitted by network security policy

原因

为保证用户数据和设备的安全,Google针对下一代 Android 系统(Android P) 的应用程序,将要求默认使用加密连接,这意味着 Android P 将禁止 App 使用所有未加密的连接,因此运行 Android P 系统的安卓设备无论是接收或者发送流量,未来都不能明码传输,需要使用下一代(Transport Layer Security)传输层安全协议,而 Android Nougat 和 Oreo 则不受影响。
在Android P系统的设备上,如果应用使用的是非加密的明文流量的http网络请求,则会导致该应用无法进行网络请求,https则不会受影响,同样地,如果应用嵌套了webview,webview也只能使用https请求。

解决办法:

(1)APP改用https请求

(2)targetSdkVersion 降到27以下

(3)在 application 元素中添加:

 android:usesCleartextTraffic=”true” 
复制代码



java.net.UnknownServiceException: CLEARTEXT... 解决办法

异常:

Error running Android Debugger (8600): Unable to open debugger port (localhost:8600): java.net.ConnectException "Connection refused: connect"

解决方法:

adb kill-server
adb start-server
复制代码

猜你喜欢

转载自juejin.im/post/7034151332818878494