bug_ _ _常见的bug??

======= 7    Failure [INSTALL_FAILED_INVALID_APK]

执行  adb install -r test.apk。时出现错误  Failure [INSTALL_FAILED_INVALID_APK]

可能是apk的签名出现问题,这个在之前遇到过,需要给apk签名

今天安装多个apk都是出现这个错误,遂关闭系统对签名的检测

方法:修改 /system/build.prop 文件。

将ro.install.3rd_cert=true

修改为ro.install.3rd_cert=false

重启设备就可以安装apk了

=========6   安装失败:INSTALL_FAILED_VERIFICATION_FAILURE?  Install_failed_verifcation_failure?

    你必须允许未签名的应用。安装被Android。允许设置非市场的应用程序安装。

=========5    关于魅族MX3无法弹出Toast的问题

    设置->应用->你的应用,里面有一个显示通知的选项,打上勾,应该就可以了,你试一下

==========  4.3   Segmentation fault 问题浅谈

今天调试程序时遇到了一个问题,当我用GDB调试程序时出现了Segmentation fault,以前没有遇到过,最后查看资料,有点明白了。
    出现了Segmentation fault,基本上的原因是,非法的内存访问。
例如数组的越界,在循环操作时循环变量的控制问题,也有字符串拷贝时长度溢出,指针指向了非法的空间,还有就是申明一个指针,但却没有对其初始化,就直接引用,或者没有开辟内存空间就释放内存,所以要检查申请空间时间偶成功。。。

还有那个问题在调试时会有这样的信息:Program terminated with signal SIGSEGV, Segmentation fault.
对于SIGSEGV这个信号,经常会和SIGBUS信号出现在一块,

SIGBUS与SIGSEGV信号的一般区别如下:

1) SIGBUS(Bus error)意味着指针所对应的地址是有效地址,但总线不能正常使用该指针。
通常是未对齐的数据访问所致。
2) SIGSEGV(Segment fault)意味着指针所对应的地址是无效地址,没有物理内存对应该地址。

 
通常导致段错误的几个直接原因:
1、解除引用一个包含非法值的指针。
2、解除引用一个空指针(常常由于从系统程序中返回空指针,并未经检查就使用)。
3、在未得到正确的权限时进行访问。
4、用完了堆栈或堆空间(虚拟内存虽然巨大,但绝非无限)。

这些是我个人的一些看法,希望和大家交流。。。

======= 4。2    java 异常java.lang.UnsupportedOperationException

在项目中采用一个枚举的集合,本人采用Collections中的空集合Collections.emptyList()在添加时发生异常:

常见集合如下:

private List<VacationCategory> vacationcategorys = Collections.emptyList();

报错误如下:

-- Encapsulated exception ------------\
java.lang.UnsupportedOperationException
..............................

JDK API解释如下:

java.lang.CloneNotSupportedException

不支持克隆异常。当没有实现Cloneable接口或者不支持克隆方法时,调用其clone()方法则抛出该异常。

在网上查一下原因是因为部分集合类型一样但是缺少部分方法或不支持。

如特殊情况如下:

(1)常常使用Arrays.asLisvt()后调用add,remove这些method时出现java.lang.UnsupportedOperationException异常。这是由于:

Arrays.asLisvt() 返回java.util.Arrays$ArrayList, 而不是ArrayList。Arrays$ArrayList和ArrayList都是继承AbstractList,remove,add等method在AbstractList中是默认throw UnsupportedOperationException而且不作任何操作。ArrayList override这些method来对list进行操作,但是Arrays$ArrayList没有override remove(int),add(int)等,所以throw UnsupportedOperationException。
解决方法是使用Iterator,或者转换为ArrayList

List list = Arrays.asList(a[]);
List arrayList = new ArrayList(list);

(2)

private List<VacationCategory> vacationcategorys = Collections.emptyList();

执行remove,add等method时,抛出此异常,本人将上述代码改为:

private List<VacationCategory> vacationcategorys = new ArrayList<VacationCategory>();

没有此错误,于是我查看一下源代码:

源码如下:此类在Collections的类中:

EmptyList此集合竟然没有相应的add,remove等方法

========== 4.1  Caused by: java.lang.IllegalArgumentException: Invalid path: /mnt/sdcar

E/AndroidRuntime( 2766): Caused by: java.lang.IllegalArgumentException: Invalid path: /mnt/sdcard

E/AndroidRuntime( 2766):      at android.os.StatFs.doStat(StatFs.java:46)

E/AndroidRuntime( 2766):      at android.os.StatFs.(StatFs.java:39)

E/AndroidRuntime( 2766): Caused by: libcore.io.ErrnoException: statfs failed: EIO (I/O error)

try {

StatFs f = new StatFs(path);

BigInteger freeBig = BigInteger.valueOf(f.getFreeBlocks())

.multiply(BigInteger.valueOf(f.getBlockSize()));

BigInteger sizeBig = BigInteger.valueOf(f.getBlockCount())

.multiply(BigInteger.valueOf(f.getBlockSize()));

.......................

} catch (Exception e) {

LogUtils.e("e ----------------------yyyyyyyyyyyyyyyyyyyyyyyyy  = " + e.toString());

}

不多说了, 添加try ,可以解决上面异常。

======4   彻底解决 Canvas 引起的 java.lang.unsupported operation exception, android.view.GLES20Canvas.clipPath(GLES20Canvas异常

发现在使用 Canvas.clipPath() 方法的时候,3.0版本以下可以正常使用,但是3.0以上由于谷歌默认开启了硬件加速,

就会抛 java.lang.unsupported operation exception, android.view.GLES20Canvas.clipPath(GLES20Canvas... 的异常,可以关闭硬件加速,但是最低编译版本就要换成3.0,所以2.X 的机器就用不了这个应用,后来搜索发现可以给View设置关闭硬件加速,但是翻页效果是直接画出来的,没有View...

解决方法 1:

使用以下代码:

if (Build.VERSION.SDK_INT > Build.VERSION_CODES.HONEYCOMB) {
Gma_CustomImage.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}

====

最近在做一个电子书项目,想要把开源的Shelves+iReader的翻页卷曲等弄到一起,在做卷曲效果时遇到以下问题:

java.lang.unsupported operation exception, android.view.GLES20Canvas.clipPath(GLES20Canvas...

万能的谷哥告诉我,这是硬件加速的问题,可是我从来没开启过硬件加速啊,做了个测试,View层的硬件加速已经干掉了

,那硬件加速肯定来自于Canvas绘制层了,测试了下,果然是绘制层开启了硬件加速。

给一个链接,讲硬件加速讲的很清楚的文章:点击查看

综合看了之后解决了,即在AndroidManifest.xml application下设定:

<application
android:label="@string/application_name"
android:hardwareAccelerated="false">

---------------------------------------------------------------------------------------------------------------------------------------------

关于 Hardware Acceleration

  1、不同层级的加速:

Application

<applicationandroid:hardwareAccelerated="true" ...>

Activity

<application android:hardwareAccelerated="true">
<activity ... />
<activity android:hardwareAccelerated="false" />
</application>

Window

    getWindow().setFlags(
WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,
WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);

View

myView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

2、如何判断是否开启了硬件加速

在绘制之前,你必须做该测试 Canvas.isHardwareAccelerated() 替代View.isHardwareAccelerated() 在必要时。

View.isHardwareAccelerated() ;//returns true if the View is attached to a hardware accelerated window.
Canvas.isHardwareAccelerated();// returns true if the Canvas is hardware accelerated

3、开启硬件加速之后,许多2D的绘制方法会抛出异常:

bug_ _ _常见的bug??



In addition, some operations behave differently with hardware acceleration enabled:



 
 
bug_ _ _常见的bug??

=========3   com.google.gson.stream.MalformedJsonException的解决办法

关于Gson解析的异常,我花费两个小时才调试出来。如果你程序出现以下的异常,有两种可能性:‘

1. 找到一个JSON格式的验证工具,这个网上很多大家可以百度下

2.你的JSON格式验证没有问题,却一直报这个解析错误,请确定你的JSON数据没有多余的空格。这个空格有可能在IO流读取的时候多读了

  1. com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 33
  2. at com.google.gson.Gson.assertFullConsumption(Gson.java:779)
  3. at com.google.gson.Gson.fromJson(Gson.java:769)
  4. at com.google.gson.Gson.fromJson(Gson.java:717)
  5. at com.google.gson.Gson.fromJson(Gson.java:689)
  6. at com.ant.Test.main(Test.java:24)
  7. Caused by: com.google.gson.stream.MalformedJsonException: Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 33
  8. at com.google.gson.stream.JsonReader.syntaxError(JsonReader.java:1505)
  9. at com.google.gson.stream.JsonReader.checkLenient(JsonReader.java:1386)
  10. at com.google.gson.stream.JsonReader.doPeek(JsonReader.java:531)
  11. at com.google.gson.stream.JsonReader.peek(JsonReader.java:414)
  12. at com.google.gson.Gson.assertFullConsumption(Gson.java:775)
  13. ... 4 more

=======2   Error:(1, 0) Plugin with id 'com.android.application' not found.

    在build.gradle文件里加入

// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.0+'
}
} allprojects {
repositories {
jcenter()
}
}

=========1  ,java.lang.UnsupportedOperationException 解决方案

常常使用Arrays.asLisvt()后,  调用add,remove这些method时出现 java.lang.UnsupportedOperationException异常。

这是由于:
Arrays.asLisvt() 返回java.util.Arrays$ArrayList, 而不是ArrayList。Arrays$ArrayList和ArrayList都是继承AbstractList,remove,add等 method在AbstractList中是默认throw UnsupportedOperationException而且不作任何操作。

ArrayList override这些method来对list进行操作,但是Arrays$ArrayList没有override remove(int),add(int)等,所以throw UnsupportedOperationException。

解决方法是使用Iterator,或者  转换为ArrayList
List list = Arrays.asList(a[]);
List arrayList = new ArrayList(list);

上一篇:Atitit 项目中的勋章体系,,mvp建设 ,荣典体系建设


下一篇:Linux Centos安装宝塔面板教程