问题1:Duplicate class com.xxx.xxx.xxx.BuildConfig found in modules jetified-A-release-runtime 问题
> Duplicate class com.xxxdemo.xxx.xxx.BuildConfig found in modules jetified-A-release-runtime (:A-release:) and jetified-B-release-runtime (:B-release:)
Execution failed for task ':XXXdemo:checkReleaseDuplicateClasses'.
> A failure occurred while executing com.android.build.gradle.internal.tasks.CheckDuplicatesRunnable
> Duplicate class com.XXX.XXX.B.BuildConfig found in modules jetified-A-release-runtime (:A-release:) and jetified-B-release-runtime (:B-release:)
解决:
1、刚开始以为是依赖问题,实际上多重依赖问题也不大,主要可能是版本不同就容易出现上述问题,版本问题看以下文章:
2、但最终我的问题是AndroidManifest.xml文件里面指定的"package=MyPakageName"包名不小心写错跟我依赖的第三方aar库包名重名了,改名之后就OK了。
问题2:W/System.err: java.io.IOException: Cannot run program "su": error=13, Permission denied
代码:
Process p = Runtime.getRuntime().exec("su");
解决:
Process su = Runtime.getRuntime().exec("/system/bin/sh");
推荐博文:
问题3:java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
场景:没有了aidl服务,获取数据需要延迟,线程新增定时器出现此问题。
解决:
private Handler mHandler;
mHandler = new Handler(Looper.getMainLooper());
问题4:android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
问题代码:
Intent intent = new Intent(mContext.getApplicationContext(), MyActivity.class);
mContext.startActivity(intent);
解决:
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK );
问题5:The application could not be installed: INSTALL_FAILED_CONFLICTING_PROVIDER
解决:
更改android:authorities属性,该命名重名或者冲突了
<provider
android:name="com.xxx.provider.TDBProvider"
android:authorities="com.sprovider"
android:exported="true"
android:process=":remote"
/>
问题6:Manifest merger failed with multiple errors, see logs
解决:
aar与当前工程的Manifest清单文件重复注册了,删除当前工程文件注册即可。
问题7:BadTokenException: Unable to add window android.view.ViewRootImpl
悬浮窗权限:
onCreate()添加:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (!Settings.canDrawOverlays(this)) {
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, OVERLAY_PERMISSION_REQ_CODE);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == OVERLAY_PERMISSION_REQ_CODE) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (!Settings.canDrawOverlays(this)) {
// SYSTEM_ALERT_WINDOW permission not granted...
}
}
}
}
SDK版本>23即android 6.0以上系统会弹出一个提示框允许界面上有提示框显示,打开开关即可。
问题8:java.lang.IllegalArgumentException: Can only use lower 16 bits for requestCode
解决:
private static final int xxx_PERMISSION_REQ_CODE = 11;
这里的赋值不能超过2的16次方值即35536。
问题9:ActivityThread: Failed to find provider info for com.xxx.xxxprovider
解决:
保证远程数据库访问Uri作者与manifast注册作者的一致性:
<!-- 数据库远程访问 -->
<provider
android:name="com.xxx.xxx.xxxService.provider.xxxDBProvider"
android:authorities="com.aaa.aaa.aaaprovider"
android:exported="true"
android:process=":remote"
tools:ignore="ExportedContentProvider"
/>
/**
* DATABASE匹配,权值, 注意:保持与注册的作者一致性。
*/
public static final String AUTHORITIES = "com.aaa.aaa.aaaprovider";
private static final UriMatcher MATCHER = new UriMatcher(UriMatcher.NO_MATCH);
MATCHER.addURI(xxx.AUTHORITIES, xxx.xxx_PATH, BBB_ARCHIVES);
/*注意: 保持与注册的作者一致性。*/
private Uri mUri = null;
public static final String xxx_URI = "content://" + AUTHORITIES + "/BBB_ARCHIVES";
mUri = Uri.parse(xxx_URI);