# ABCReadingBookAndroidSdkDemo **Repository Path**: kong09/ABCReadingBookAndroidSdkDemo ## Basic Information - **Project Name**: ABCReadingBookAndroidSdkDemo - **Description**: ABCReadingBookSdk android版本 Demo - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2018-12-10 - **Last Updated**: 2020-12-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ABC Reading SDK Android 文档 > [注册](#register) > > [集成](#make) > > [语音评测配置](#voice_eval) > > [支付配置](#payment) > > [调起SDK页面](#start) > > [统计](#statistics) > > [混淆](#proguard) > > [权限](#permission) ABC Reading SDK是对ABC Reading APP中绘本阅读功能的输出,其中包含了绘本馆,绘本阅读功能。 [查看版本信息][update_id] [update_id]:https://gitee.com/kong09/ABCReadingBookAndroidSdkDemo/blob/master/UpdateDocument.md ### 1. 注册 首先使用ABC Reading SDK之前需要先向我们注册App,来获得APP认证信息。**同时还需要提供APP签名的SHA1码**否则无法使用绘本阅读功能。 ### 2. 集成 我们目前只支持针对合作方提供sdk,没有公共下载渠道。 * 项目中集成 1. 将sdk复制到项目libs目录下 2. 将libappsignpwd-lib.so复制到jniLibs目录下 3. 添加语音评测引擎工具类。 4. 在Application中配置项目 5. 依赖库添加 #### 2.1 sdk包集成 在sdk包集成中,开发者需要将sdk和libappsignpwd-lib.so文件集成到项目中。其中sdk包(library-XXX.aar)放在项目的libs目录下,libappsignpwd-lib.so则需要向我们定制对应类型cpu兼容类型的so文件,并放在jniLibs下的对应文件中。 #### 2.2 语音评测引擎工具类 ##### 情况一:项目中集成过ssound.jar 如果项目中已经集成ssound.jar语音sdk,就需要使用我们针对ssound.jar封装的工具类ABCVoiceEvalEngineNet类。ABCVoiceEvalEngine语音评测引擎工具类是语音评测引擎接口VoiceEvalEngine的实现,需要添加到项目中用来完成语音评测功能的。**该评测类不支持本地语音评测只支持在线评测**。 ##### 情况二:项目中没有ssound.jar 如果项目中没有集成ssound.jar,就需要添加speech.aar包来实现语音评测核心功能(**如果项目中使用speech.aar,内部是包含ssound.jar的**),我们也封装了对应的工具类ABCVoiceEvalEngine,同样是通过实现VoiceEvalEngine接口。**该评测类添加方式支持本地和在线语音评测**。 #### 2.3 在Application中配置项目 sdk集成中需要在Application中进行初始化操作,需要使用ABCLibraryApi类,进行初始化操作。 * 初始化内容分为三个: 1. 注册App相关信息 2. 配置语音评测引擎 3. 设置支付页面 4. 设置兑换页面 5. 设置服务器类型 6. 设置首页背景 7. 设置图片加载器 ##### 2.3.1 app信息注册 ABCLibraryApi.init(< appId >, < appKey >); ##### 2.3.2 配置语音评测引擎 ABCLibraryApi.setupSpeechEngine(arg); 在这里进行语音引擎的配置操作,arg为语音引擎实例。 ##### 2.3.3 设置支付页面 ABCLibraryApi.setupPaymentView(arg); 这里进行支付页面设置,arg为支付页面的class。 ##### 2.3.4 设置兑换页面 ABCLibraryApi.setupExchangeCodeView(arg); 这里进行支付页面设置,arg为兑换页面的class。 ##### 2.3.5 设置服务器类型 ABCLibraryApi.debug(true); 这里进行服务器设置,默认false是线上服务器,true是测试服务器。 ##### 2.3.6 设置不同Level背景图片 ABCLibraryApi.setResConfig(LibraryBackground.BG_LEVEL_AA, R.drawable.xxx); ##### 2.3.7 设置默认图片加载器 ABCLibraryApi.setImageStrategy(new GlideImageLoaderStrategy()); #### 2.4 添加sdk依赖库 由于本sdk是UI类型的sdk,需要依赖一些第三方库。 ``` api 'androidx.annotation:annotation:1.0.0' api 'androidx.appcompat:appcompat:1.0.0' api 'androidx.recyclerview:recyclerview:1.0.0' api 'androidx.cardview:cardview:1.0.0' api 'androidx.legacy:legacy-support-v4:1.0.0' api 'com.squareup.retrofit2:retrofit:2.3.0' api 'com.squareup.retrofit2:converter-gson:2.3.0' api 'com.squareup.retrofit2:adapter-rxjava2:2.3.0' api 'com.squareup.okhttp3:okhttp:3.9.0' api 'com.squareup.okhttp3:logging-interceptor:3.9.0' api 'io.reactivex.rxjava2:rxjava:2.1.5' api 'io.reactivex.rxjava2:rxandroid:2.1.5' api 'com.airbnb.android:lottie:3.4.0' api 'com.aliyun.dpa:oss-android-sdk:2.9.2' ``` ### 3. 语音评测配置 sdk内部有语音评测功能但是没有封装语音评测功能sdk,通过公共api接口(VoiceEvalEngine)在全局配置中添加评测引擎的方式实现。将功能拆分放在sdk外部,开发者可以自己定制不同的语音引擎。这里我们只根据ssound.jar提供两种语音引擎。 语音引擎接口VoiceEvalEngine ``` public interface VoiceEvalEngine { /** * 初始化评分引擎 */ void newEngine(Context var1); /** * 设置录音评分结束回调 */ void setOnVoiceEvalStopListener(VoiceEvalEngine.OnVoiceEvalResultListener var1); /** * 设置录音结束回调 */ void setOnRecordStopListener(VoiceEvalEngine.OnRecordListener var1); /** * 判断打分引擎是否可用 */ boolean isAvailable(); /** * 判断是否正在录音 */ boolean isRecording(); /** * 启动录音评测 * * @param var1 为评测录音对照文本 */ void startRecordEval(String var1); /** * 停止录音 */ void stopRecord(); /** * 取消录音 * 需要删除本地录音资源 */ void cancelRecord(); /** * 删除录音 * 需要回收资源 */ void deleteRecord(); /** * 返回当前语音引擎类是否使用网络进行评测 */ boolean isNetworking(); /** * 最少录音时长-毫秒 * @return 最少录音时长 500~1000 */ int leastRecordMillisecond(); public interface OnRecordListener { /* * 录音结束监听 * var1 为null时,录音正常结束 * 出现异常时,需要回传异常 */ void onRecordStop(Throwable var1); } public interface OnVoiceEvalResultListener { /* * 语音评测结果回调 * var1 语音文件的本地路径 * var2 评测分数 */ void onVoiceEvalResult(String var1, String var2); } } ``` ### 4. 支付配置 通过在Application中配置,在项目中进行购买时就会跳转到配置好的页面中,进行支付操作。 #### 4.1 携带参数 会通过Intent携带用户和购买信息 ``` Intent intent = getIntent(); uid = intent.getStringExtra("uid"); levelId = intent.getStringExtra("levelId"); levelName = intent.getStringExtra("levelName"); ``` 开发者可以通过用户信息进行支付流程的操作。 #### 4.2 支付成功通知服务器更新用户数据 如果用户支付成功,可以通过ABCLibraryApi.getApiService().addOrder()方式通知并更新用户数据。 ***这里需要接入方在服务器接口也进行一次同步*** 例如: ``` ABCLibraryApi.getApiService().addOrder( uid, //该平台用户ID levelId,//购买level对应id / 全level购买默认Id 1000 levelName,//购买level对应name "1",//购买时长 1半年 2一年 3一月 money,//购买支付金额,单位分 order_no,//第三方订单号 String.valueOf(System.currentTimeMillis() / 1000),//支付时间,精确到秒 new IApiCallback() { @Override public void onApiSuccess() { //订单添加成功 //如果操作成功,需要设置返回成功标志,否则无法刷新书架绘本带锁状态 setResult(PaymentJump.RESULT_SUCCESS); } @Override public void onApiFail(String errMsg) { //订单添加失败 } } ); ``` 通过setResult(PaymentJump.RESULT_SUCCESS),设置返回结果的方式进行跨界面通知,刷新用户信息,绘本解锁。 ### 5. 调起SDK页面 调起sdk的绘本馆页面,同样适用ABCLibraryApi。 ``` UserData data = new UserData(); data.uid = "10001";//用户id data.age = "11";//年龄 data.grade = "5";//年级 data.client = "3";//用户端口:1 教师 2 课堂 3学生端 data.sex = "1";//0保密,1男,2女 data.province = "北京"; data.city = "北京市"; data.area = "海淀区"; ABCLibraryApi.startLibrary(this, data); ``` 调起绘本馆需要传入用户数据,用来注册用户信息。 ### 6. 统计 sdk中加入了统计代码,支持TalkingData,友盟和mta三个平台,在打包使用时需要定制统计功能,**否则会影响app中原有统计功能**。请在集成项目时向我们定制统计类型。 ### 7. 混淆 ##### okhttp ``` #okhttp -keep class okhttp3.internal.**{*;} -dontwarn okio.** -dontwarn okhttp3.logging.** ``` ##### retrofit ``` -dontwarn retrofit2.** -keep class retrofit2.** { *; } -keepattributes Exceptions -keepclassmembers,allowshrinking,allowobfuscation interface * { @retrofit2.http.* ; } -dontwarn javax.inject.** -dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement ``` ##### RxJava & RxAndroid ``` -dontwarn sun.misc.** -keepclassmembers class rx.internal.util.unsafe.*ArrayQueue*Field* { long producerIndex; long consumerIndex; } -keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueProducerNodeRef { rx.internal.util.atomic.LinkedQueueNode producerNode; } -keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueConsumerNodeRef { rx.internal.util.atomic.LinkedQueueNode consumerNode; } ``` ##### Gson ``` -keep class com.google.gson.stream.** { *; } -keepattributes EnclosingMethod ``` ##### 友盟 如果使用SDK中的友盟统计,需要添加 ``` -keep class com.umeng.** {*;} -keepclassmembers class * { public (org.json.JSONObject); } -keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); } ``` ##### TalkingData 如果使用SDK中的TalkingData统计,需要添加 ``` -dontwarn com.tendcloud.tenddata.** -keep class com.tendcloud.** {*;} -keep public class com.tendcloud.tenddata.** { public protected *;} -keepclassmembers class com.tendcloud.tenddata.**{ public void *(***); } -keep class com.talkingdata.sdk.TalkingDataSDK {public *;} -keep class com.apptalkingdata.** {*;} -keep class dice.** {*; } -dontwarn dice.** ``` ##### mta 如果使用SDK中的mta统计,需要添加 ``` -keep class com.tencent.stat.*{*;} -keep class com.tencent.mid.*{*;} ``` ##### 七牛 ``` #七牛上传(2.2.0及之后不再需要) -keep class com.qiniu.**{*;} -keep class com.qiniu.**{public ();} -ignorewarnings ``` ##### ali-oss ``` #ali-oss上传 -keep class com.alibaba.sdk.android.oss.** { *; } -dontwarn okio.** -dontwarn org.apache.commons.codec.binary.** ``` ##### 语音评测包 ``` #语音评测包混淆代码 -keep class com.tt.* { *; } -keep class com.xs.* { *; } -keep interface com.xs.* { *; } -keep enum com.xs.* { *; } ``` ##### 本应用需添加混淆 ``` -keep public class com.abctime.api.** { *; } -keep public class * implements com.abctime.library.IGsonData ``` ### 8. 权限 本SDK需要使用到麦克风权限和内存权限,其中对麦克风权限有处理,**内存权限需要宿主应用处理运行权限**