1. Estendendo o SDK
Além do SDK central, também fornecemos um SDK de extensão, que é Uma biblioteca que recorre ao SDK principal e fornece várias APIs de applet que não estão disponíveis no Core SDK. O motivo para provar um sdk de extensão é garantir que o núcleo SDK é leve o suficiente e a API de applet já está certa. O núcleo SDK é Responsável por configurar a estrutura básica para executar o aplicativo e Fornecendo um pequeno número das APIs mais inacessíveis, mantendo Somente permissões básicas, como armazenamento, câmera, geologia, etc. e Tem apenas um pouco mais de 1 MB de tamanho.
Obtenha o SDK estendido
Você pode baixar o arquivo Android SDK no Centro de Download de Recursos. No arquivo zip de download.
Se você quiser usar a API no sdk de extensão, poderá confiar no Biblioteca SDK de extensão em Gradle em
implementation 'com.finogeeks.mop:plugins:x.y.z' //x.y.z must be
replaced with the specific version number1.1 Visão geral da extensão SDK SMP API
| api name | API Descrição Informações |
|---|---|
| getLocation | Obtenha local |
| startRecord | Comece a gravar |
| stopRecord | Pare de recuar |
| RecorderManager | A globally unique recording manager |
2. Mapsdk
O MAPSDK suporta o componente do mapa e o local. Ele roths no núcleo SDK como um complemento para o Map e Location Funções. Os recursos de mapa e localização fornecidos dependem de um terceiro-Mapa da festa E SDK local, que suporta o uso de três complementos deGode Subscribe to DeepL Pro to edit this document. Visit www.DeepL.com/profor more information. Map|Gode Location ,,Baidu Map|Baidu Location e Google Map|Google LocationEntão então
Nota
Por favor, veja "Development-API-Location" para O suporte local da API das soluções Gaode, Baidu e Google.
2.1 Integração
- Dependência da Biblioteca Mapsdk em Gradle.
implementation 'com.finogeeks.mop:map:x.y.z' //x.y.z must be replaced with the specific version number- Desde que a capacidade de mapa e localização implementada por MapsDK depende no terceiro-Mapa da festa e local aplicativo host para integrar o terceiro-Mapa de festas e localização sdk e completo Api_key, registro de serviço, etc.
Nota
Selecione um dos seguintes fornecedores de SDK de terceiros para Incten SDKs da festa, por favor, consulte o escritório, documentação.
Confiança nas bibliotecas SDK de terceiros: (selecione um)
//Gaudet
implementation 'com.amap.api:3dmap:8.0.0' // you can replace it with the version number you need
implementation 'com.amap.api:location:5.5.1' // you can replace it with the version number you need
implementation 'com.amap.api:search:7.9.0' // you can replace it with the version number you need// Baidu
implementation 'com.baidu.lbsyun:BaiduMapSDK_Map:7.4.0' // you can replace it with the version number you need
implementation 'com.baidu.lbsyun:BaiduMapSDK_Location:9.1.8' // you can replace it with the version number you need
implementation 'com.baidu.lbsyun:BaiduMapSDK_Search:7.4.0' // you can replace it with the version number you need//Google
implementation 'com.google.android.gms:play-services-maps:16.1.0' //this version is recommended and can be replaced with the version number you need, but it is not supported above this version
implementation 'com.google.android.gms:play-services-location:16.0.0'
// this version is recommended and can be replaced with the version number you need, but it is not supported above this versionRegistre a API_KEY e o serviço do SDK de terceiros em AndroidManifest.xml : (Escolha um, dependendo do terceiro sdk você depende de)
//Gaudet
< meta-data
android:name= "com.amap.api.v2.apikey"
android:value= "The ApiKey you requested" />
< service android:name= "com.amap.api.location.APSService" />// Baidu
< meta-data
android:name= "com.baidu.lbsapi.API_KEY"
android:value= "The ApiKey you requested" />
< service
android:name= "com.baidu.location.f"
android:enabled= "true"
android:process= ":remote" />/Google
< meta-data
android:name= "com.google.android.geo.API_KEY"
android:value= "The ApiKey you requested" />Configure a arquitetura SOL da biblioteca suportada pelo terceiro SDK em build.gradle Então então
android {
defaultConfig {
ndk {
//Set the supported SO library architecture (you can select one or more platforms of so as required)
abiFilters "armeabi" , "armeabi-v7a" , "arm64-v8a" , "x86" ,
"x86_64"
}
}
}3. Bluetooth SDK
O uso da interface Bluetooth requer uma integração de seções do Bluetooth SDK, Onece Integrated the Interface entrará em vigor e não É necessária configuração. Método de integração.
implementation 'com.finogeeks.mop:bluetooth:x.y.z'3.1 Visão geral da API relacionada ao Bluetooth SDK
| api name | API Descrição Informações |
|---|---|
| bluetooth-universal | Uma variedade de API |
| Bluetooth - low-power central device | Uma variedade de API |
| Bluetooth - Low Power Peripherals | Uma variedade de API |
| bluetooth-beacon | Uma variedade de API |
4. SoundNet SDK
O usuário das interfaces relacionadas à Net Requer uma seção Integração do SoundNet SDK, que entrará em vigor assim que o Interfaces são integradas e nenhuma configuração é necessária. Método de integração.
implementation 'com.finogeeks.mop:agora:x.y.z'Se você usar a importação de AAR para aceitar o SDK, você precisará Adicione uma dependência adicional da rede sonora.
implementation 'io.agora.rtc:full-sdk:3.5.0'4.1 Visão geral do SoundNet SDK-API relacionada
| api name | API Descrição Informações |
|---|---|
| init | Inicialize o SoundNet SDK |
| setRole | SetClientRole |
| join | Junte -se ao canal |
| publish | Comece a empurrar fluxos |
| muteLocal | Mudo local |
| unmuteLocal | Unmutelocal |
| mute | remote mute |
| unmute | unmute remote |
| renewToken | refreshToken |
| setRemoteVideoStreamType | Set the subscribed video stream type |
| destroy | Stop pushing the stream and release resources |
5. Webrtcsdk
Usando webrtc-Interfaces relacionadas requer uma seção webrtcsdk Integração, que entra em vigor uma quando a interface é integrada e Não requer configuração. Método de integração.
implementation 'com.finogeeks.mop:webrtc:x.y.z'Se você estiver usando a imagem AAR para aceitar, você precisará Para adicionar dependências WebRTC adicionais.
implementation 'org.webrtc:google-webrtc:1.0.32006'5.1 Visão geral do webrtcsdk-API relacionada
| api name | API Descrição Informações |
|---|---|
| mediaDevices | As interfaces relacionadas ao MediaDevices fornecem acesso a dispositivos conectados a entradas de mídia, como câmeras e microfones, bem como compartilhamento de tela. Ele permite obter dados de mídia de qualquer recurso de hardware. |
| rtcPeerConnection | Interface relacionada a RTCPeerConnection que representa uma conexão WebRTC do computador local até a extremidade remota. Esta interface fornece a implementação de métodos para criar, manter, monitorar e fechar a conexão. |
| mediaStream | Interface relacionada ao MediaStream que representa um fluxo de conteúdo de mídia. Um fluxo contém várias faixas, por ex. faixas de vídeo e áudio. |
| mediaRecorder | Interfaces relacionadas ao MediaRecorder, fornecendo gravador de mídia e outras APIs relacionadas. |
6. Entre em contato com o SDK
O uso do controle-Interfaces relacionadas requer uma integração de seção do SDK de controle, que entra em vigor assim que a interface é integrada E não requer configuração. Método de integração.
implementation 'com.finogeeks.mop:contact:x.y.z'6.1 Visão geral do contato SDK-API relacionada
| api name | API Descrição Informações |
|---|---|
| addPhoneContact | Adicione o nome da API de contatos do telefone |
7. SDK da área de transferência
Usando a área de transferência-Interfaces relacionadas requer uma integração de seção do sdk da área de transferência, o branco entra em vigor assim que a interface estiver Integrado e não requer configuração. Método de integração.
implementation 'com.finogeeks.mop:clipboard:x.y.z'7.1 Visão geral da API relacionada à área de transferência SDK
| api name | API Descrição Informações |
|---|---|
| setClipboardData | SetClipboardContent |
| getClipboardData | GetClipboardContent |
8. Mídia SDK
Suportado da versão 2.38.0 em diante Este SDK é necessário para que o componente de vídeo seja integrado ao Jogue como você avança. Método de integração:
android {
packagingOptions {
doNotStrip "*/arm64-v8a/libijkffmpeg.so"
doNotStrip "*/arm64-v8a/libijkplayer.so"
doNotStrip "*/arm64-v8a/libijksdl.so"
doNotStrip "*/armeabi/libijkffmpeg.so"
doNotStrip "*/armeabi/libijkplayer.so"
doNotStrip "*/armeabi/libijksdl.so"
doNotStrip "*/armeabi-v7a/libijkffmpeg.so"
doNotStrip "*/armeabi-v7a/libijkplayer.so"
doNotStrip "*/armeabi-v7a/libijksdl.so"
doNotStrip "*/x86/libijkffmpeg.so"
doNotStrip "*/x86/libijkplayer.so"
doNotStrip "*/x86/libijksdl.so"
doNotStrip "*/x86_64/libijkffmpeg.so"
doNotStrip "*/x86_64/libijkplayer.so"
doNotStrip "*/x86_64/libijksdl.so"
}
}
dependencies {
implementation 'com.finogeeks.mop:media:x.y.z' //x.y.z must be replaced with the specific version number
implementation 'tv.danmaku.ijk.media:ijkplayer-java:0.8.8'
}Adicione a obfusão executada ao Proguard-Arquivo Regras.Pro:
# Media SDK
-keep public class
com.finogeeks.PhizClip.plugins.media.player.ijk.FinIjkMediaPlayerFactory
{
public <init> ();
}
-keep class
com.finogeeks.PhizClip.plugins.media.player.ijk.IjkMediaPlayerOptionsApp
lier {
public static <fields>;
public static <methods>;
}
-keep class
com.finogeeks.PhizClip.plugins.media.player.ijk.IjkMediaPlayerOptionsApp
lier$Applier {*;}
-keep class
com.finogeeks.PhizClip.plugins.media.player.ijk.IjkMediaPlayerOptionsApp
lier$Options {*;}
#ijkplayer
-keep class tv.danmaku.ijk.media.player.** {*;}
-keep class tv.danmaku.ijk.media.player.IjkMediaPlayer{*;}
-keep class tv.danmaku.ijk.media.player.ffmpeg.FFmpegApi{*;}Após a integração do SDK da mídia, a implementação do jogador de O componente de vídeo mudará automático da solução do sistema MediaPlayer para a solução ijkmediaplayer sem nenhuma outra ação.
8.1 APIs relacionadas da mídia SDK
Como o ijkmediaplayer tem muitos itens de configuração e as necessidades de Cada aplicativo é diferente, o SDK de mídia expõe a configuração Funções no aplicativo devido a chamada.
class SampleApplication : MultiDexApplication() {
override fun onCreate() {
super.onCreate()
IjkMediaPlayerOptionsApplier.setIjkMediaPlayerOptionsApplier(this) {
it.setOption(
IjkMediaPlayer.OPT_CATEGORY_PLAYER,
"start-on-prepared" ,
0
) // Disable auto-start playback and leave it to the upper
levels to control
it.setOption(
IjkMediaPlayer.OPT_CATEGORY_PLAYER,
"max-buffer-size" ,
(1024 * 24).toLong()
) // Maximum buffer size, in kb
it.setOption(
IjkMediaPlayer.OPT_CATEGORY_PLAYER,
"packet-buffering" ,
0L
) // So set that the loading status will only be displayed
when it stops in time
it.setOption(
IjkMediaPlayer.OPT_CATEGORY_PLAYER,
"enable-accurate-seek" ,
1
) // set to precise seek
}
// Other initialisation codes ......
}
}A configuração no trecho de código acima é o padrão Configuração do SDK de mídia e pode ser configurado pelo aplicativo Desenvolvedor para atender às suas necessidades.
8.2 Alguns problemas com ijkmediaplayer
8.2.1 continua carregando e não toca
Em alguns modelos, pode haver um poplem onde continua carregando e Não pode ser reproduzido. Com o Logcat, se você encontrou as seguintes formas de bugs.
Fatal signal 11 (SIGSEGV), code 2 (SEGV_ACCERR), fault addr
0x7783dd1920 in tid 25128 (ff_read), pid 22268Se o aplicativo estiver em execução no Android 11 e a arquitetura da CPU é o ARMV8A, você precisa adicionar um atributo android:allowNativeHeapPointerTagging="false" para a etiqueta do aplicativo do arquivo manifest.xml. Veja: [issues/5342]([Crashing with arm64-v8aFatal signal 11 (SIGSEGV) , Código 2 (SEGV_ACArr), Addr0x77783dd1920 em TID 25128 (FF_READ), PID 22268 (RMDZH .IJKPLAYER)-Edição #5342- Bilibili/ijkPlayer- Github] (https://github.com/bilibili/ijkplayer/issues/5342))
8.2.2 Progresso imprecisões
Ao arrastar a barra de progresso ou cortar e sair da tela inteira, O progresso pode estar de volta, isso é porque o jogador precisa analisar Frames de chave e só pode ir de quadros -chave para reproduzir, o seguinte A configuração precisa ser adicionada para ativar a busca exata.
it.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "enable-accurateseek" , 1) // set to accurate seekObserve que ativar a busca exata pode ter problemas com a tela Não atualizando depois de procurar quando parado.
9. Phizsdk
Aceita rápida para o Phiz SDK fornece a capacidade de ligar para o Phiz Para obter login, informações do usuário, número de telefone celular e pagamento via Appleto Phiz. Método de integração.
implementation 'com.finogeeks.mop:wechat:x.y.z'e adicione o ID do aplicativo Phiz que você solicitou na plataforma aberta do Phiz para o build.gradle Arquivo do seu projeto (por exemplo app/build.gradle ) NO
android {
// ... Other configurations omitted
defaultConfig {
// ... Other configurations omitted
resValue "string" , "phiz_sdk_app_id" , "Your Phiz SDKAPPID"
}
}Nota
Para usar o Phizsdk, você deve desviar que a versão sdk central seja 2.37.13 Ou acima.
Nota
Como o Phizsdk precisa substituir o open-type Métodos relacionados em o IAppletHandler , Especificamente chooseAvatar ,, contact ,, feedback ,, getPhoneNumber ,, launchApp ,, shareAppMessage Então então Então, se você implementou IAppletHandler e implementaram o Acima de seis métodos, Phizsdk assumirá o controle getPhoneNumber e a Os cinco métodos restantes serão migrados da seguinte forma, se você não tiver Implementd IAppletHandler ou não use o método de cerca de seis, você Pode ignorar isso.
- Implementar o
IWeChatOpenTypeHandlerinterface.
class MyWeChatAppletOpenTypeHandler : IWeChatOpenTypeHandler {
override fun chooseAvatar(callback:
IAppletHandler.IAppletCallback) {
// The logic of your implementation
}
override fun contact(json: JSONObject): Boolean {
// The logic of your implementation
}
override fun feedback(bundle: Bundle): Boolean {
// The logic of your implementation
}
override fun launchApp(appParameter: String?): Boolean {
// The logic of your implementation
}
override fun shareAppMessage(
appInfo: String,
bitmap: Bitmap?
callback: IAppletHandler.
) {
// The logic of your implementation
}
}- Depois que o núcleo SDK possui um ponto inicial, configure seu Classe de implementação. (Observe que, como no núcleo SDK, é imagine Para garantir que ele esteja configurado no processo principal).
WeChatOpenTypeClient.instance.iWeChatOpenTypeHandler =
MyWeChatAppletOpenTypeHandler()9.1 Visão geral de Phizsdk-API relacionada
| api name | API Descrição Informações |
|---|---|
| login | Aumente o applet do Phiz, obtenha as credenciais de login e retorne O resultado para o applet phizdclip |
| getUserProfile | Aumenta o applet do Phiz, obtém as informações do usuário, e retorna os resultados ao applet phizclip |
| requestPayment | Invoca o applet do Phiz, indica um Phiz Pagamento e retorna o resultado ao applet phizclip |
| getPhoneNumber | Levanta o applet do Phiz, recebe o token dinâmico, e retorna o resultado ao applet phizclip |