记录在实际开发中遇到的问题及心得
当使用自定义注解同时使用反射获取属性值时,Field. isAnnotationPresent 判断此属性是否存在注解,如果isAnnotationPresent 方法一直返回false 可以查看下自定义注解中是否添加:
@Retention(RetentionPolicy.RUNTIME) 【表示运行时存在】
##ADB 调度使用
遇到这种情况,直接在活动监视器中杀掉ADB重新启动就可,亲测可行:
对于module 添加如下操作
// implementation fileTree(include: [’*.jar’], dir: ‘libs’)
provided files(‘libs/utiltool.jar’)
第一行是去掉gradle自动扫描libs目录下的jar,第二行是以provided的方式参与编译
1.在首启动的引导页或者广告页的activity的style加入以下代码
true
true
java.lang.UnsatisfiedLinkError: dlopen failed: file offset for the library “/data/app/com.beiya.littletraveler-1/lib/arm/***.so” file size =0>
解决办法:查看**.so的大小是否为空
修改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"
}
}
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