1:编译签名apk后如何输出日志
2:低版本手机上无法安装apk
Android打包生成DEX文件过程中, 单个DEX文件可被引用的方法总数被限制为65536,超出会导致应用无法安装。
- 需要在app.gradle中进行引用Multidex支持库,将一个dex拆分为多个:
1> defaultConfig {
...
...
// Enabling multidex support.
multiDexEnabled true
}
...
}
dependencies { compile 'com.android.support:multidex:1.0.0' }
application中重写以下方法:
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base); MultiDex.install(this);
}
- 直接在Application -- onCreate方法中添加
MultiDex.install(this);
3:Android 9.0设备访问页面报 net::ERR_CLEARTEXT_NOT_PERMITTED
9.0新加的限制,对未加密url直接放弃请求 (http的url均不可以),如想正常访问需在Application中添加红框中的内容
4:Android Studio/Idea AAPT2 错误
AAPT 全称是 Android Asset Packaging Tool,它是构建 App,甚至是构建 Android 系统都必不可少的一个工具。它的作用是将所有资源文件压缩打包到Android APK 当中。在 Android SDK 目录下可以找到它。
1 > com.android.builder.internal.aapt.v2.Aapt2Exception: AAPT2 error
2 > 在高版本中禁用AAPT2配置作废,报错信息如下 :
The option 'android.enableAapt2' is deprecated and should not be used anymore.
Use 'android.enableAapt2=true' to remove this warning. It will be removed at the end of 2018..
出现以上2种问题的公共解决方式为以下第二和第三条
- 在 gradle.properties 文件中,增加 “android.enableAapt2=false”,禁用AAPT2 (仅在错误1中可用)
- 构建 App 的时候,打开 Build 窗口,点击 “Toggle View” 切换到文本输出,根据gradle 的执行输出查看排除问题进行解决
- 查看程序目录/gradle目录是否存在中文,如果有则根据本章5的步骤进行修改
5:更改gradle缓存目录
在这里说下我更改缓存目录的原因,因为我用户名称之前是中文的(实属脑残党)所以用新版Android Studio时AAPT2检测异常,又无法禁用,网上有好几种方式更改后不觉得有用,所以只能永久的更改目录啦。
把C:\Users\xx\.gradle目录删除掉,然后在其他盘新建目录(换盘符是因为.gradle文件夹的内容会不断增加,切记不要有中文,不然换盘符没意义)
设置系统变量:GRADLE_USER_HOME,变量值为自己新建的.gradle目录
为什么要配置变量呢,因为在gradle-wrapper.properties文件中有配置此路径,至于能不能直接在这里更改路径应该也可以,自己试下吧
系统变量配置成功后,根据下图内容进行选择后重新build下即可,如果出现异常:Unexpected lock protocol found in lock file. Expected 3, found 0.可能是有缓存之类的没清除,按照图2清除掉缓存即可。可以查看原目录下是否有生成.gradle,有Bug的话请留言赐教 ?^ ^
6:安卓通知栏使用
NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
Notification builder = new NotificationCompat.Builder(IntentActivity.this)
.setContentTitle("通知信息")
.setContentText("通知内容")
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.mipmap.ic_cool)
.build();
manager.notify(1,builder);
Notification必须包含标题,标题内容,小图标三个属性,否则会发生异常,通知栏中将不显示通知内容
7:java.lang.RuntimeException: Unable to instantiate service xx.MyServiceActivity$MyService: java.lang.InstantiationException: class xx.MyServiceActivity$MyService has no zero argument constructor
项目中的服务是内部类,然后创建时报错,根据错误提示在MyService中添加了无参的构造函数,依然报错.....
然后将内部MyService类声明成静态类后,完美解决。
8:service
如果startService()、 bindService()一起被调用的话,onCreate()方法只在startService()时调用一次;销毁服务时需要调用unBindService()和stopService(),否则服务还存在。
当使用startService()启动服务时,当前Activity被销毁,那服务依然存在;当使用bindService()启动服务时,Activity销毁则服务也被销毁。
9:scrollView + listView动态布局
当listView列表中的控件有Button的时候,会导致listView.setOnItemClickListener()事件无效
解决方式:
1> 将列表中的Button控件换成TextView
2> 将listView布局替换成LinearLayout
10:vivo x9安装apk报 -- 解析包错误
解决方式:
转载自:Android Studio在vivo手机上调试apk出现解析包出错_徐代龙的技术专栏-CSDN博客_android studio解析包时出现问题
11:在Android studio目录下更改gradle build tools 版本
按照标识的目录找到build.gradle.ftl文件,编辑修改并保存,build tools版本默认为Android Studio Ide的版本号
gradle-projects目录下是各种项目模板配置文件,默认新建的是NewAndroidProject项目
12:Android ANR文件生成类型
APP出现Anr的时候默认会在/data/anr/下生成anr的日志文件traces.txt,每次生成都会替换文件内容,但因Android手机的多样性,SDK版本的更新,有些手机的anr文件会丢失,有些生成的文件名称会改变,经过测试多款手机大致分为:
1> 正常生成 /data/anr/traces.txt 文件
每次发生anr,文件都会被替换,文件内容为最后一次出现anr时的日志
2> 生成/data/anr/traces_包名.txt文件
根据应用包名生成anr日志文件
3> 生成/data/anr/traces_包名_年月日.txt文件
根据应用包名和发生时间生成日志文件
4> 在/data/anr/下没有anr的日志文件
可以通过adb bugreport抓取日志,但是抓取的日志种类比较多,文件会很大,根据以下图片所说内容,并没有在当前项目路径下生成文件,应该会有默认的路径,但是没找到,后续找到会更新这里
13:命令获取文件md5值
certutil -hashfile libcomm.so MD5
14:不将第三方库打入jar包
15:获取so库路径
Context.getApplicationInfo().nativeLibraryDir + "so库名称"
16:AndroidStudio升级到3.5最新版本
编译报错:D:\A_work\.gradle\caches\modules-2\modules-2.lock ,打开多个as项目导致,关闭掉多余项目即可,是否还有其它原因还未证实
17:AndroidStudio LogCat窗口找不到的解决办法
按图的步骤操作即可找到,或者直接用快捷键Alt+6
18:部分真机设备连接正常不显示日志的解决办法
实测 MX6 :打开【设置】中的【开发者选项】,页面底部找到【性能优化】,打开【高级日志输出】,勾选【全部允许】即可
其他类型的设备可以自行测试,但我觉得应该不会差太多
19: Android studio编译报错
“android:TextAppearance.Material.Widget.Button.Inverse not found”
更改v7版本与api一致,重新编译
20:子线程中解析Crash日志并发送导致Anr的解决方式
自定义CustomCrashHandler类实现Thread.UncaughtExceptionHandler,在uncaughtException类中开启子线程解析错误日志并发送,如果不将异常提交给默认的异常处理器 ,会导致ANR
public class CustomErrorHandler implements Thread.UncaughtExceptionHandler {
private ErrorPriCallback mErrorPriCallback;
public CustomErrorHandler() {
}
private Thread.UncaughtExceptionHandler otherHandler;
/**
* 初始化,注册Context对象, 获取系统默认的UncaughtException处理器, 设置该CrashHandler为程序的默认处理器
*
* @param errorPriCallback 异常出现后处理方式回调
*/
public void init(ErrorPriCallback errorPriCallback) {
mErrorPriCallback = errorPriCallback;
otherHandler = Thread.getDefaultUncaughtExceptionHandler();//之前这里没有加,导致anr
Thread.setDefaultUncaughtExceptionHandler(this);
}
public void setHandler(Thread.UncaughtExceptionHandler handler) {
otherHandler = handler;
}
/**
* 异常发生时,系统回调的函数,我们在这里处理一些操作
*/
@Override
public void uncaughtException(final Thread thread, final Throwable ex) {
// 提示用户程序即将退出
new Thread(new Runnable() {
@Override
public void run() {
PApmLog.trace("crash-----> uncaughtException ");
// 崩溃信息
mErrorPriCallback.priInfo(CRASH, thread, ex);
// 如果有其他的handler在此处理
if (otherHandler != null) {
PApmLog.trace("crash-----> uncaughtException "+otherHandler);
otherHandler.uncaughtException(thread, ex);
}
}
}).start();
}
}
21:Android 设备mac地址可当下更改
关闭wifi后,打开拨号界面输入*#*#3646633#*#*进入工程模式,选择Connectivity,点击进入WIFI,再选择进入NVRAM,在Byte String Access这一项,addr填4、length填6,点击read后可以查看当前的mac地址,更改自己想要的mac地址(12位数字或字母)后点击write写入,打开wifi后查看mac地址,修改成功。当重启设备后恢复原来的mac地址。
10以上的mac地址切了网后会更改mac地址,10以下不会出现。
22:IDEA惊天bug:进程已结束,退出代码-1073741819 (0xC0000005)
累死你也想不到是和金山词霸冲突,有朋友说是关掉划译功能就不影响,而我直接卸载金山词霸重启IDEA就可以了,转自:IDEA惊天bug:进程已结束,退出代码-1073741819 (0xC0000005)_沉默王二-CSDN博客_退出代码0xc0000005
23:AndroidStudio无法运行java main函数
解决方案:
项目目录下找.idea文件目录下gradle.xml文件
打开文件查找是否有delegatedBuild节点,如果没有就加上,如果有检查value是否为false
<option name="delegatedBuild" value="false" />
注意是在GradleProjectSettings标签下
改完之后保存重新build项目运行就可以了
24:AndroidStudio 4.1Run窗口中文乱码解决办法
按如下配置重启即可:
25:使用Android sdk/build-tools/dx工具转jar为dex时出现:-Djava.ext.dirs is not supported
如运行其他.bat工具命令也出现此问题,修改方式一致
参照 Java-JDK9-Djava.ext.dirs is not supported - 简书 (jianshu.com)