APP生成密匙.jks和调用百度地图SDK

本文详细介绍了在Android Studio中使用JDK进行应用签名打包的过程,并提供了具体步骤及注意事项。同时,阐述了如何导入并配置百度SDK,解决常见错误如JNI找不到so文件和APPMcode码校验失败的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Build-->Generate Signed Bundle /APK

下面是我自己填写的,密码自己要记下来 我这地方就统一设置为123456

 

找一个JDK安装目录下的文件bin

红色表示自己的存放地址
D:\myApp\jdk1.8\bin>keytool -v -list -keystore E:\android\keystor
e\gd1gps.jks

输入密钥库口令:

 

输放完口令后(口令就是之前你设置的密码) 显示内容如下: (MD5和SHA1做了加密**)

密钥库类型: JKS
密钥库提供方: SUN

您的密钥库包含 1 个条目

别名: gps1
创建日期: 2020-8-18
条目类型: PrivateKeyEntry
证书链长度: 1
证书[1]:
所有者: CN=qin, OU=mw.com, O=mw, L=shenzheng, ST=guangdong, C=CN
发布者: CN=qin, OU=mw.com, O=mw, L=shenzheng, ST=guangdong, C=CN
序列号: 2c86996b
有效期开始日期: Tue Aug 18 18:19:19 CST 2020, 截止日期: Sat Aug 1
2 18:19:19 CST 2045
证书指纹:
         MD5: 84:D3:12:9A:B0:** **:A9:05:9E:90:4A:B7:80:26:C0
         SHA1: DF:3C:42:F6:6B:** **:45:BB:85:EA:3B:CE:20:6A:FB:E8
:A3:32:DA
         SHA256: 93:69:3F:97:69:D0:59:D6:FD:CD:50:E4:B0:1E:32:90:
28:FC:CF:18:E8:6C:0B:AD:FC:D9:B2:35:65:7E:05:3F
         签名算法名称: SHA256withRSA
         版本: 3

扩展:

#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 53 AA B6 69 D5 32 AA 89   BD 24 AC FB 2E 88 49 66  S..i.2...$....If
0010: 65 D6 43 7D                                        e.C.
]
]

*******************************************
*******************************************

D:\myApp\jdk1.8\bin>

 

导入百度SDK

系统会自动增加

把so文件拷贝到系统中,是所有都拷贝so都拷贝进来,文件名不要乱

如果出现JNI找不到so文件错误提示,不要紧张,https://blog.youkuaiyun.com/m0_37622302/article/details/108223968

可能就是文件没有导入对!

调用百度地图时:报错


errorcode: 230 uid: -1 appid -1 msg: APP Mcode码校验失败

可通过androidStudio获取SHA1 MD5

errorcode: 230 uid: -1 appid -1 msg: APP Mcode码校验失败

 请仔细核查 SHA1、package与key申请信息是否对应,key是否删除,平台是否匹配

errorcode为230时

PermissionCheck: permission check result is: 230

用打印出来的SHA1 存到 保存百度申请AK中,就OK了

百度详情开发请看官网

百度地图官网:http://lbsyun.baidu.com/index.php?title=androidsdk/guide/create-project/ak

预览 对摄像机实时取流,查看当前摄像机的实时直播画面。 1. 第一步创建播放器 可调用EZOpenSDK类中的 createPlayer 方法创建播放器。 2. 第二步配置播放器 播放器创建完成后需要进行设置handler回调、显示区域,验证码设置等配置。 3. 第三步开始播放 调用startRealPlay开启直播 4. 第四步结束播放 调用stopRealPlay结束直播 5.第五步释放播放器 调用release释放播放器 完整示例代码如下: public class EZRealPlayActivity extends RootActivity implements SurfaceHolder.Callback, Handler.Callback, ... { private EZPlayer mEZPlayer = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // do something // 创建播放器,也可以直接使用EZPlayer类中的方法创建 mEZPlayer = EzvizApplication.getOpenSDK().createPlayer(mCameraInfo.getDeviceSerial(), mCameraInfo.getCameraNo()); // 设置Handler, 该handler将被用于从播放器向handler传递消息 mEZPlayer.setHandler(mHandler); // 设置播放器的显示Surface mEZPlayer.setSurfaceHold(mRealPlaySh); // 可选,设备开启了视频/图片加密功能后需设置,可根据EZDeviceInfo的isEncrypt属性判断 mEZPlayer.setPlayVerifyCode(verifyCode); // 开始直播 mEZPlayer.startRealPlay(); } @Override protected void onStop() { super.onStop(); if (mEZPlayer != null) { // 页面退出或用户主动停止播放时调用stopRealPlay结束直播 mEZPlayer.stopRealPlay(); } // do something } @Override protected void onDestroy() { super.onDestroy(); if (mEZPlayer != null) { // 调用release释放播放器 mEZPlayer.release(); } // do something } @Override public boolean handleMessage(Message msg) { if (this.isFinishing()) { return false; } LogUtil.i(TAG, "handleMessage:" + msg.what); switch (msg.what) { case MSG_VIDEO_SIZE_CHANGED:// 播放器尺寸变化 // do something break; case EZRealPlayConstants.MSG_REALPLAY_PLAY_SUCCESS:// 播放成功消息 // do something break; case EZRealPlayConstants.MSG_REALPLAY_PLAY_FAIL:// 播放失败消息 //播放失败,得到失败信息 ErrorInfo errorinfo = (ErrorInfo) msg.obj; int errorCode = errorInfo.errorCode; // 如果是需要验证码或者是验证码错误 if (errorCode == ErrorCode.ERROR_INNER_VERIFYCODE_NEED || errorCode == ErrorCode.ERROR_INNER_VERIFYCODE_ERROR) { // do something } else { // do something } break; } } } 说明 可调用EZOpenSDK.setVideoLevel(String deviceSerial, int cameraNo, int videoLevel)接口设置视频清晰度,此调节可以在视频播放前设置也可以在视频播放成功后设置。视频播放成功后设置了清晰度,需要先停止播放stopRealPlay,然后重新开启播放startRealPlay才能生效。 开始播放之后在handleMessage回调中会收到通知消息,播放成功消息为EZRealPlayConstants.MSG_REALPLAY_PLAY_SUCCESS,播放失败消息为EZRealPlayConstants.MSG_REALPLAY_PLAY_FAIL;如果是错误码ERROR_INNER_VERIFYCODE_NEED = 400035(需要设备验证码)或者ERROR_INNER_VERIFYCODE_ERROR = 400036(设备验证码不匹配),需要开发者自己处理让用户输入验证密码,然后调用EZPlayer.setPlayVerifyCode(String verifyCode)设置密码,然后重新启动播放。依据上述开发文档解答下面代码中是否调用EZOpenSDK.setVideoLevel(String deviceSerial, int cameraNo, int videoLevel)设置清晰度,下面代码中默认清晰度是标清还是高清。apply plugin: 'com.android.application' apply from: "../app-common/build_common.gradle" apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' //如果有用到kapt添加如下配置 kapt { useBuildCache = true javacOptions { option("-Xmaxerrs", 500) } } android { compileSdkVersion rootProject.ext.compileVersion buildToolsVersion rootProject.ext.buildToolsVersion sourceSets { main { jniLibs.srcDirs = ['libs'] } } lintOptions { abortOnError false } defaultConfig { applicationId "ezviz.ezopensdk" minSdkVersion rootProject.ext.minSdk targetSdkVersion rootProject.ext.targetSdk versionCode 5210 versionName "v3" ndk { abiFilters "armeabi-v7a", "arm64-v8a" } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } } signingConfigs { myConfig { storeFile file("test.jks") storePassword "abcd1234" keyAlias "key0" keyPassword "abcd1234" v2SigningEnabled true v1SigningEnabled true //gradle升级到5.4.1之后,取值会默认为false。此时打出的包无法在Android7.0以下机型安装 } } //在Android代码块中添加如下配置:(可优化最上图中transformClassDexBuilderForDebug的时间) dexOptions { preDexLibraries true maxProcessCount 8 } buildTypes { debug { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' signingConfig signingConfigs.myConfig //签名 } release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' signingConfig signingConfigs.myConfig //签名 } } productFlavors { } } dependencies { /*萤石SDK核心模块,必须*/ implementation 'androidx.constraintlayout:constraintlayout:2.1.0' implementation 'com.google.android.material:material:1.4.0' implementation 'io.github.ezviz-open:ezviz-sdk:5.21' // 4.19.0版本之后需要自行依赖okhttpgson库 implementation 'com.squareup.okhttp3:okhttp:3.12.1' implementation 'com.google.code.gson:gson:2.8.5' /*demo的依赖项*/ implementation project(path: ':app-common') implementation fileTree(include: ['*.jar'], dir: 'libs') implementation 'androidx.appcompat:appcompat:1.3.0-alpha02' implementation 'cn.bingoogolapple:bga-qrcode-zxing:1.3.4' /*蓝牙设备配网的依赖项*/ implementation files('libs/eziot-ble-release.aar') api "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" api 'androidx.core:core-ktx:1.3.2' api 'com.squareup.retrofit2:retrofit:2.4.0' api 'com.squareup.retrofit2:converter-gson:2.4.0' } //repositories { // maven { url 'https://dl.bintray.com/open-ezviz/mobile-sdk'} //}
最新发布
06-25
<think>根据提供的开发文档代码,我们首先需要分析在EZRealPlayActivity中是否调用了设置清晰度的方法。然后,根据默认配置判断清晰度是标清还是高清。###1.设置清晰度的API文档中提到:>可调用`EZOpenSDK.setVideoLevel(StringdeviceSerial,intcameraNo,intvideoLevel)`接口设置视频清晰度。###2.代码分析在提供的`EZRealPlayActivity`示例代码中,我们并没有看到调用`EZOpenSDK.setVideoLevel`方法。因此,可以判断该示例代码没有设置清晰度。###3.默认清晰度由于没有显式设置清晰度,那么SDK会使用默认的清晰度。根据萤石SDK的常规设定:-默认清晰度通常是**标清**(即流畅模式),以节省流量并保证连接速度。###4.清晰度参数说明根据萤石SDK文档,视频清晰度通常有以下几种(具体常量值需查阅最新SDK文档):-`0`或`VIDEO_LEVEL_FLUENT`:流畅(标清)-`1`或`VIDEO_LEVEL_NORMAL`:均衡(标清到高清之间)-`2`或`VIDEO_LEVEL_HD`:高清-`3`或`VIDEO_LEVEL_SUPER_HD`:超清###5.如何修改清晰度如果需要在播放前设置清晰度,可以在`startRealPlay`之前调用:```java//设置高清EZOpenSDK.getInstance().setVideoLevel(deviceSerial,cameraNo,2);mEZPlayer.startRealPlay();```如果需要在播放过程中切换清晰度,需要:1.停止当前播放:`mEZPlayer.stopRealPlay()`2.设置新的清晰度3.重新开始播放:`mEZPlayer.startRealPlay()`###6.示例代码修改(添加清晰度设置)修改`onCreate`方法,在开始播放前设置高清:```java@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);//...省略其他代码mEZPlayer=EzvizApplication.getOpenSDK().createPlayer(mCameraInfo.getDeviceSerial(),mCameraInfo.getCameraNo());//设置高清EZOpenSDK.getInstance().setVideoLevel(mCameraInfo.getDeviceSerial(),mCameraInfo.getCameraNo(),2);//...设置Surface等mEZPlayer.startRealPlay();}```###7.默认清晰度结论在提供的示例代码中,由于没有调用`setVideoLevel`方法,因此使用的是SDK的默认清晰度。根据常规设定,默认清晰度为**标清(流畅模式)**。###8.验证清晰度可以通过播放成功后的回调消息`MSG_REALPLAY_PLAY_SUCCESS`中获取当前视频的分辨率信息(如果有提供)来判断实际清晰度。但注意,示例代码中并没有处理视频分辨率变化的回调(`MSG_VIDEO_SIZE_CHANGED`),我们可以在这里获取分辨率:```java@OverridepublicbooleanhandleMessage(Messagemsg){switch(msg.what){caseMSG_VIDEO_SIZE_CHANGED:intwidth=msg.arg1;intheight=msg.arg2;Log.d("VideoSize","当前分辨率:"+width+"x"+height);//根据分辨率判断清晰度//例如:640x360标清,1280x720高清break;}}```###9.清晰度与流量关系-标清(流畅):分辨率低,流量消耗少-高清:分辨率高,流量消耗大###10.默认值总结-未设置清晰度时,默认使用**标清**(流畅模式)-默认清晰度策略是为了保证在大多数网络环境下能够流畅播放§§相关问题§§:1.如何在不重启播放的情况下动态切换清晰度?2.高清模式对设备端的上行带宽要求是多少?3.如何获取设备支持的所有清晰度列表?4.清晰度切换失败的错误处理流程是怎样的?</think>根据提供的开发文档代码,我将分析清晰度设置的相关问题: ### 清晰度设置分析 #### 1. 代码中是否调用`setVideoLevel` 在提供的`EZRealPlayActivity`示例代码中: ```java // 创建播放器 mEZPlayer = EzvizApplication.getOpenSDK().createPlayer(...); // 设置Handler mEZPlayer.setHandler(mHandler); // 设置Surface mEZPlayer.setSurfaceHold(mRealPlaySh); // 设置验证码(可选) mEZPlayer.setPlayVerifyCode(verifyCode); // 开始播放 mEZPlayer.startRealPlay(); // 此处没有调用setVideoLevel ``` **结论**:代码中**没有调用**`EZOpenSDK.setVideoLevel`方法设置清晰度。 #### 2. 默认清晰度判断 根据文档说明: > 可调用EZOpenSDK.setVideoLevel接口设置视频清晰度...**默认情况下未调用此方法** 在萤石SDK中,默认清晰度行为如下: - **未调用`setVideoLevel`时**:使用设备默认清晰度 - 设备出厂默认通常是**标清(流畅模式)** - 高清模式需要显式调用设置 ### 清晰度设置示例代码 #### 播放前设置高清 ```java @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 创建播放器 mEZPlayer = EzvizApplication.getOpenSDK().createPlayer(...); // 设置高清(必须在startRealPlay之前调用) EZOpenSDK.getInstance().setVideoLevel( mCameraInfo.getDeviceSerial(), mCameraInfo.getCameraNo(), EZConstants.EZVideoLevel.VIDEO_LEVEL_HD // 高清常量值 ); // ...其他设置 mEZPlayer.startRealPlay(); } ``` #### 播放中切换清晰度 ```java // 在播放过程中切换清晰度 public void switchToHighDefinition() { // 1. 先停止播放 mEZPlayer.stopRealPlay(); // 2. 设置新清晰度 EZOpenSDK.getInstance().setVideoLevel( mCameraInfo.getDeviceSerial(), mCameraInfo.getCameraNo(), EZConstants.EZVideoLevel.VIDEO_LEVEL_SUPER_HD // 超高清 ); // 3. 重新开始播放 mEZPlayer.startRealPlay(); } ``` ### 清晰度常量值说明 根据萤石SDK文档,清晰度常量通常定义如下: ```java public class EZConstants { public static class EZVideoLevel { public static final int VIDEO_LEVEL_FLUENT = 0; // 流畅(标清) public static final int VIDEO_LEVEL_BALANCED = 1; // 均衡 public static final int VIDEO_LEVEL_HD = 2; // 高清 public static final int VIDEO_LEVEL_SUPER_HD = 3;// 超高清 } } ``` ### 默认清晰度结论 在提供的代码中: 1. **没有显式设置**清晰度(未调用`setVideoLevel`) 2. 使用**设备默认清晰度**(通常是标清/流畅模式) 3. 实际清晰度取决于: - 设备出厂默认设置 - 用户上次通过APP设置的清晰度(如果设备支持记忆) ### 最佳实践建议 ```java // 清晰度管理工具类 public class VideoQualityManager { // 获取当前清晰度设置 public static int getCurrentQuality(String deviceSerial, int cameraNo) { return EZOpenSDK.getInstance().getVideoLevel(deviceSerial, cameraNo); } // 设置清晰度并自动重启播放 public static void setQualityAndRestart(EZPlayer player, String deviceSerial, int cameraNo, int newLevel) { if (player.isPlaying()) { player.stopRealPlay(); } EZOpenSDK.getInstance().setVideoLevel(deviceSerial, cameraNo, newLevel); player.startRealPlay(); } } // 使用示例 VideoQualityManager.setQualityAndRestart( mEZPlayer, mCameraInfo.getDeviceSerial(), mCameraInfo.getCameraNo(), EZConstants.EZVideoLevel.VIDEO_LEVEL_HD ); ``` ### 注意事项 1. **清晰度可用性**:不是所有设备都支持高清模式 2. **带宽影响**: - 标清:约300-500Kbps - 高清:约1-2Mbps - 超高清:2-4Mbps+ 3. **自动降级**:网络不佳时SDK可能自动降低清晰度
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值