android导入第三方jar包报错 如何正确导入jar包
在android上导入zxing.jar包,解析总是源码报错:Could not find class 'com.google.zxing.MultiFormatWriter', referenced from method com.changyang.app.util.Encode2dUtil.creat2DCode后来找到了解决方法:在adt 的版本之前,导入第三方jar包时要建立一个lib目录,解析并 add to buiild path。源码在adt的解析修改wp源码版本之后,导入第三方jar包,源码要建立一个libs目录,解析不能使用lib命名,源码adt会自动将jar依赖。解析不用手动添加了。源码
Java之使用zxing.jar包生成二维码
在数字化时代的解析日新月异中,二维码已经渗透到生活的源码方方面面,其在软件开发中扮演着重要角色。解析本文将向你展示如何利用zxing.jar库轻松生成二维码,源码让你的项目具备这一实用功能。 首先,我们来看一个实际场景:许多平台都内置了二维码生成功能。要实现这个功能,fabric签名源码我们需要进行一些基础设置。以下是关键步骤:1. 准备工作
为了集成zxing.jar,你需要在Maven项目中进行以下操作:在<pom.xml文件中添加zxing的依赖,确保项目能够引用所需的库。
接下来,我们创建一个测试类来演示二维码的生成和处理过程。在名为TestController的类中,我们将编写核心代码。2. 测试二维码功能
启动项目后,gops 源码解析你可以通过调用我们编写的测试接口来生成和查看二维码。这个过程通常涉及到API调用和数据编码,但具体实现细节取决于你的项目结构和配置。Zxing Zbar 结合真正的极速秒扫
二维码扫描功能在APP开发中不可或缺,但市面上的现成Demo往往存在各种bug,如预览变形、图像拉伸、识别速度慢等问题。为了提供更稳定高效的源码程序制作体验,我们决定自建扫描功能。最初考虑使用ZXing进行相机预览,配合ZBar解码,理论上速度会有所提升,但实际操作中,遇到多个问题。
在整合ZXing与ZBar时,我们发现将数据进行旋转以适应竖屏扫描变得困难,因为ZXing不支持横向扫描二维码。统一源码经过分析,发现旋转数据的代码在RedMi 3手机上的执行时间约为ms,导致竖屏扫描速度明显减慢。为解决此问题,我们采取了以下步骤:
首先,编译ZXing,使用Maven构建项目,确保环境配置正确,将生成的jar包复制到ZXing项目的Android目录中。
接着,优化ZXing以支持竖屏扫描。修改CameraManager类的getFramingRect()方法,调整扫描框尺寸为正方形。在DecodeHandler类的decode方法中,加入代码进行相机数据旋转。通过这些优化,扫描功能在竖屏下得以实现,但速度仍然较慢。
为了进一步提升解码速度,我们使用C语言编写数组转换函数,编译成SO库,替换掉解码方法中的数组转换过程。此优化使得速度提升近倍,解决了解码速度慢的问题。
此外,我们还提供选择模式,用户可根据需求在兼容模式(使用ZXing解码)和高速模式(使用Zbar解码)之间切换,以兼容不同功能需求。经过上述优化和整合,我们成功实现了快速、稳定的二维码扫描功能,满足了用户对于扫描效率和体验的高要求。
android项目中加入zxing,混淆打包出错,求解决
写在视图xml中的onClick响应出错. 因为写在xml中的onClick是通过反射调用的, proguard认为它们没有在代码中被调用过, 所以将它们从代码中除掉或改名了. 解决方法:
在proguard.cfg中添加以下代码, 就可以防止被配在视图xml中的onClick方法被proguard优化掉
-keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
}
jni反调Java方法
这些类或方法同样可能会被proguard认为没有调用过而被除掉, 或都被改名. 这些方法最好统一写在一个类中, 然后这个类不作优化, 或是找出所有jni调用过的类与方法, 在proguard.cfg中配置, 不对它们作优化
其它反射调用的java类与方法
使用反射时一定要注意proguard可能会认为那些方法未被调用过, 会在代码优化过程中将它们改名或除去. 在使用反射的地方一定要在proguard.cfg中配置, 不优化反射调用过的类和方法
最后在proguard优化过后会产生一些文件
dump.txt – 描述.apk文件中所有类文件间的内部结构
mapping.txt – 列出了原始的类,方法和字段名与混淆后代码间的映射。这个文件很重要,当你从release版本中收到一个bug报告时,可以用它来翻译被混淆的代码。
seeds.txt – 列出了未被混淆的类和成员
usage.txt – 列出了从.apk中删除的代码
要注意分析mapping.txt与usage.txt看xml视图中写的onClick响应函数, jni调用到的java类与方法, 反射调用过的类与方法是否被混淆或重命名
-keep class com.badlogic.gdx.backends.Android.**{ *;}
的只是不混淆:这个包下的类(不包括子包里的东西),用到一个第三文的类就要把这个类所在的包,像上面加上
还要注意的是android-support-v4.jar这个包问题,这里加上了对这个jar包的处理
第三方jar的混淆,
-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
-keep public class * extends android.app.Activity // 继承activity,application,service,broadcastReceiver,contentprovider....不进行混淆
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService
-libraryjars /libs/android-support-v4.jar
-libraryjars /libs/gdx-backend-android.jar
-libraryjars /libs/gdx.jar
// 这里不对第三方的jar包的提出WARN
-dontwarn com.badlogic.
**-dontwarn android.support`这里写代码片`.v4.
**-dontwarn android.support.v4.view.
**// 这里对第三方jar包的类不进行混淆
-keep class com.badlogic.gdx.backends.android.**{ *;}
-keep class com.badlogic.gdx.**{ *;}
-keep class com.badlogic.gdx.graphics.g2d.**{ *;}
-keep class com.badlogic.gdx.graphics.**{ *;}
-keep class android.support.v4.view.**{ *;}
// 这里第三方JAR包处理结束
-keepclasseswithmembernames class * { // natvie 方法不混淆
native ;
}
-keepclasseswithmembers class * {
// 对于所有类,有这个构造函数不进行混淆,主要是为了在layout中的,自定义的view
public (android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembers class * {
public (android.content.Context, android.util.AttributeSet, int);
}
-keepclassmembers class * extends android.app.Activity {
// 这个主要是在layout 中写的onclick方法android:onclick="onClick",不进行混淆
public void *(android.view.View);
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
2024-11-30 18:19
2024-11-30 18:14
2024-11-30 18:13
2024-11-30 18:07
2024-11-30 17:39