起因:
开发一款 app,需要运行在手持设备和手机上。app 包含扫码功能,手持设备上运行需要使用手持设备生产商提供的 arr 包来调用扫码功能,因此造成了手机和手持设备需要使用不同方式调用扫码功能。
开发过程:
最初手持设备和手机分别建立了两个分支,分别进行开发。其中大部分代码相同,打包等需要进行两遍,较麻烦。
因此决定将两个分支合并,只需要一个安装包便可以运行在两个设备上。
问题 1:
描述:
手持设备依赖系统库”device.sdk“如果系统不存在该库,则安装软件时报错“INSTALL_FAILED_MISSING_SHARED_LIBRARY”,可手机上肯定是不存在该库的。
解决:
找到手持设备厂商提供的 aar 包,修改该包下 AndroidManifest.xml 文件。(在 application 节点下添加以下配置)
<uses-library
android:name="device.sdk"
android:required="true" />
声明该库非必须依赖,至此便可以安装在手机上了。
问题 2:
描述:
此时虽然软件可以强行安装在手机上,但手机调用到手持设备厂商提供的方法是会报错,故需要判断当前设备决定扫码方式。
解决:
此时可以通过设备型号来进行判断或根据是否存在依赖库来判断当前设备。
本次使用判断是否存在依赖库解决:(判断方法如下)
//判断系统是否存在某个依赖库
public static boolean hasLib(Context context, String libName) {
String[] sharedLibraryNames = context.getPackageManager().getSystemSharedLibraryNames();
for (String sharedLibraryName : sharedLibraryNames) {
if (sharedLibraryName.equals(libName)) {
return true;
}
}
return false;
}
在 Activity 的 onCreate 方法内调用:
//获取是否存在依赖库
hasDeviceSdk = LibUtil.hasLib(this, "device.sdk");
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于