Android日常遇到的一些问题汇总

1.Unable to determine application id: com.android.tools.idea.run.ApkProvisionException: No outputs for the main artifact of variant: debug

遇到这个问题很多时候都是gradle和AS的版本不匹配所导致的

解决方法:

方法1:从哪来到哪去,重新下载之前的AS版本替换把。附上链接:AS下载1AS下载2

方法2:不想替换的就升级gradle版本把,下载方式很多,自行百度。

方法3:如下图所示增加gradle task时第一行选择项目,第二行输入installDebug,保存即可。

2.Expecting 'android:screenOrientation="unspecified"' or '"fullSensor"' for this activity so the user can use the application in any orientation and provide a great experience on Chrome OS devices.

这个问题主要是告诉大家不要限制方向。

解决方法:

打开setting -->搜索Inspections-->在Chrome OS下把两个Activity is locked to an orientation勾去掉即可。

3.Activity class {} does not exist  Error while Launching activity

运行的时候出现这个神奇的问题,新建项目是好的,有些项目也是好的,我的项目在没升级之前都是好好的,所以比较纳闷,网上也找了很多方法

方法:检查module中的applicationId和AndroidManifest中的包名是否一致,adb uninstall 包名,clean+Rebuild套餐,删除项目和module的build文件,重启AS,当然这些对于我来说都没有用。

最后我升级了gradle版本,App就能正常运行了,如果还不行,就试试上面的第一个问题的方法3。

4.Program type already present:

这个问题主要是添加了重复依赖

解决方法:

仔细查看自己的报错,是否存在依赖重复了,我是因为引用的一个lib下的aar单独写了引用,后来我直接在build.gradle的repositories添加

flatDir {
    dirs 'libs'
}
dependencies下直接用
implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar'])

解决了。

有时候按照上面这些操作后还会出现依赖重复问题,我的解决方案是删除lib文件夹下没引用到包,然后再把主module的build.gradle下屏蔽的引用代码删除,在删掉build文件重新sync一下,即可成功解决问题。

5.

遇到类似的问题是因为Android 6.0不再支持 Apache HTTP client, 建议使用 HttpURLConnection 代替。如果还是要继续使用 Apache HTTP client解决方法如下

解决方法:

在AndroidManifest的application节点下,添加

<uses-library android:name="org.apache.http.legacy" android:required="false"/>即可

6.快速查看本应用对应的MD5和SHA1值

解决方法:

1.gradle

2.代码查看

public static String sHA1(Context context) {
    try {
        PackageInfo info = context.getPackageManager().getPackageInfo(
                context.getPackageName(), PackageManager.GET_SIGNATURES);
        byte[] cert = info.signatures[0].toByteArray();
        MessageDigest md = MessageDigest.getInstance("SHA1");
        byte[] publicKey = md.digest(cert);
        StringBuffer hexString = new StringBuffer();
        for (int i = 0; i < publicKey.length; i++) {
            String appendString = Integer.toHexString(0xFF & publicKey[i])
                    .toUpperCase(Locale.US);
            if (appendString.length() == 1)
                hexString.append("0");
            hexString.append(appendString);
            hexString.append(":");
        }
        String result = hexString.toString();
        Log.v("TAG", result.substring(0, result.length() - 1));
        return result.substring(0, result.length() - 1);
    } catch (PackageManager.NameNotFoundException e) {
        e.printStackTrace();
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    }
    return null;
}

7.Android 10 无法读取本地文件 FileNotFoundException: Permission denied 解决办法

解决方法:

AndroidManifest的application根目录添加

android:requestLegacyExternalStorage="true"

顺便检查是否手动赋权了,是否适配了FileProvider。

8.AS 打release包失败,debug包正常,报错如下:

A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade

java.util.zip.ZipException:invalid code lengths set

解决方法:

按照网上的方法试了都不行,最后还是修改了gradle的插件版本,降低升高实测都有效,有效后再改回原来的版本也会有效,感觉是软件本身的问题。

9.Android java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader

分析:

一般是由于.so文件没找到导致的

问题分析和解决

1.查看so库是不是已经在编译的过程中打包到apk里。


方法:
找到项目的这个目录app\build\outputs\apk,然后用压缩软件打开app-debug.apk这个文件,去libs里找有没有报错的libxxxxxx.so文件。
解决:
如果有就把有的包里的so库复制一份放在没有的包里即可解决,没有就检查自己是不是把libxxxxxx.so文件没有放在正确的位置,然后重新打包。

2.查看项目是不是加载了so库


方法&解决:

如果so库文件是放在libs文件夹下的,必须找到项目app的build.gradle文件,添加如下写法:

android {
    sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
        }
    }
}

也可以在src/main下新建jniLibs放入对应架构的so库文件。


3.查看NDK是不是排除了你的设备架构


方法:

android {
    defaultConfig {
        ........//此处省略其他设置
        ndk {
            abiFilters  "armeabi"
        }
    }
}
如上图,这个设置就是只加载armabi架构(目录下)的so库,如果是别的架构,就会找不到。
解决:
我们可以添加自己需要的架构,这样做的好处是apk体积可以变小代码如下:

android {
    defaultConfig {
        ........//此处省略其他设置
        ndk {
            abiFilters  "armeabi","x86"
        }
    }
}
这样我们就又引入了x86架构,一定要注意每一个目录下放的so库一定要是相应架构下的目录。

4.查看是否是armeabi和armeabi-v7a都有so库


方法&解决:
我们可以引入armeabi-v7a这个架构,然后把armeabi里的文件复制一份进anmeabi-v7a目录下,然后重新编译。armeabi和armeabi-v7a文件不一致也有可能导致程序异常。

10.Installed Build Tools revision XXXX is corrupted. Remove and install again using the SDK Manager:

该问题主要描述AS原先下载的SDK对应的API版本损坏,按照指示卸载对应版本的版本和tools仍不起作用

解决方法:

网查可知对应的31缺少dx.bat和dx.jar

将androidSdk\build-tools\30.0.0\dx.bat 拷贝一份到 androidSdk\build-tools\31.0.0\dx.bat 将androidSdk\build-tools\30.0.0\lib\dx.jar 拷贝一份到 androidSdk\build-tools\31.0.0\lib\dx.jar

引用:解决方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值