Android 问题汇总

  • 开发中遇到的问题
    • 自定义注解反射
    • Android多module下重复jar包问题
    • 白屏体验时android体验的克星
    • SO文件size = 0
    • gradle 更新失败问题
    • javax.crypto.BadPaddingException: Decryption error

开发中遇到的问题

记录在实际开发中遇到的问题及心得

自定义注解反射

当使用自定义注解同时使用反射获取属性值时,Field. isAnnotationPresent 判断此属性是否存在注解,如果isAnnotationPresent 方法一直返回false 可以查看下自定义注解中是否添加:
@Retention(RetentionPolicy.RUNTIME) 【表示运行时存在】

##ADB 调度使用
Android 问题汇总_第1张图片
遇到这种情况,直接在活动监视器中杀掉ADB重新启动就可,亲测可行:
Android 问题汇总_第2张图片

Android多module下重复jar包问题

对于module 添加如下操作
// implementation fileTree(include: [’*.jar’], dir: ‘libs’)
provided files(‘libs/utiltool.jar’)
第一行是去掉gradle自动扫描libs目录下的jar,第二行是以provided的方式参与编译

白屏体验时android体验的克星

1.在首启动的引导页或者广告页的activity的style加入以下代码

true
true

SO文件size = 0

java.lang.UnsatisfiedLinkError: dlopen failed: file offset for the library “/data/app/com.beiya.littletraveler-1/lib/arm/***.so” file size =0>

解决办法:查看**.so的大小是否为空

gradle 更新失败问题

修改build.gradle 中的repositories 与allprojects部分修改如下:

buildscript {
dependencies {
classpath ‘com.android.tools.build:gradle:3.5.1’
}

repositories {    maven { url'https://maven.aliyun.com/repository/public/' }    maven { url'https://maven.aliyun.com/repository/google/' }    maven { url'https://maven.aliyun.com/repository/jcenter/' }    maven { url'https://maven.aliyun.com/repository/central/' }    //mavenCentral()

// maven { url “http://maven.aliyun.com/nexus/content/repositories/central” }
}
}

allprojects {
repositories {

    maven { url'https://maven.aliyun.com/repository/public/' }    maven { url'https://maven.aliyun.com/repository/google/' }    maven { url'https://maven.aliyun.com/repository/jcenter/' }    maven { url'https://maven.aliyun.com/repository/central/' }   // mavenCentral()}tasks.withType(JavaCompile) {    options.encoding = "UTF-8"}

}

javax.crypto.BadPaddingException: Decryption error

1.异常描述:最近做项目为了增强数据传输的安全性用到了RSA加密。即android客户端将要传送的信息,用私钥通过RSA非对称加密算法加密后,传到服务器端(PC端)。服务器端用对应(密钥)的公钥来解密时解密失败,抛出“javax.crypto.BadPaddingException: Blocktype”异常。

2.异常原因:Android系统使用的虚拟机(dalvik)跟SUN标准JDK是有所区别的,其中他们默认的RSA实现就不同。即Android端用Cipher.getInstance(“RSA”)方法进行加密时,使用的provider是Bouncycastle Security provider,Bouncycastle Security provider默认实现的是“RSA/None/NoPadding”算法,而服务器(PC)端用Cipher.getInstance(“RSA”)进行解密时,使用的是Sun的security provider,实现的是“RSA/None/PKCS1Padding”算法,所以,解密时会失败。

3.解决办法:我这里提供三种解决办法:
第一种:将服务器(pc)端的Cipher.getInstance(“RSA”)方法改为Cipher.getInstance(“RSA/ECB/NoPadding”)。但这种改法有一个缺点就是解密后的明文比加密之前多了很多空格。(空格的长度个数+原来的明文字符数=产生密钥时采用的bit数/8)

第二种:将Android端的Cipher.getInstance(“RSA”)方法改为Cipher.getInstance(“RSA/None/PKCS1Padding”)。这种方法解密后的明文和加密前的明文是对应的,不会出现第一种方法中的现象,推荐这种方法。

第三种:在服务器(pc)端的jdk中加入Bouncycastle Security provider,关于Bouncycastle JCE的安装配置及验证请参看 http://blog.csdn.net/caoshichao520326/article/details/8732670, 配置好Bouncycastle Security provider后,将服务器(pc)端的Cipher.getInstance(“RSA”)方法改为Cipher.getInstance(“RSA”,“BC”)。
————————————————
版权声明:本文为CSDN博主「sichard」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/cshichao/article/details/8731680

更多相关文章

  1. Android子控件超出父控件方法
  2. Android Studio下载及离线升级方法
  3. Delphi XE5 Android 运行黑屏卡死的解决方法
  4. Android编程: 调试方法
  5. ListView常用属性、方法
  6. Android 控件(button)对齐方法实现详解
  7. Android Studio更新升级方法

随机推荐

  1. Android Studio——Android TextUtils类
  2. 去掉所有Activity界面标题栏、强制横屏竖
  3. Serializable和Parcelable的解析与使用
  4. android(1)(四种点击事件)
  5. Android init.rc init.vendor.rc 介绍
  6. android 蓝牙知识链接汇总
  7. HandlerThread的使用
  8. 2011.09.13(3)——— android 添加快捷方式
  9. Android获取本机蓝牙地址
  10. Error:Android Source Generator: Cannot