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下载1,AS下载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
引用:解决方法