Skip to content

Commit

Permalink
Merge branch 'dev/4.5.0' into swiftUI
Browse files Browse the repository at this point in the history
# Conflicts:
#	Android/APIExample-Audio/app/build.gradle
#	Android/APIExample-Compose/app/build.gradle.kts
#	Android/APIExample-Compose/app/proguard-rules.pro
#	Android/APIExample-Compose/app/src/main/AndroidManifest.xml
#	Android/APIExample-Compose/app/src/main/java/io/agora/api/example/compose/model/Examples.kt
#	Android/APIExample-Compose/app/src/main/java/io/agora/api/example/compose/samples/ChannelEncryption.kt
#	Android/APIExample-Compose/app/src/main/java/io/agora/api/example/compose/samples/CustomAudioRender.kt
#	Android/APIExample-Compose/app/src/main/java/io/agora/api/example/compose/samples/CustomAudioSource.kt
#	Android/APIExample-Compose/app/src/main/java/io/agora/api/example/compose/samples/CustomVideoRender.kt
#	Android/APIExample-Compose/app/src/main/java/io/agora/api/example/compose/samples/CustomVideoSource.kt
#	Android/APIExample-Compose/app/src/main/java/io/agora/api/example/compose/samples/HostAcrossChannel.kt
#	Android/APIExample-Compose/app/src/main/java/io/agora/api/example/compose/samples/JoinChannelVideo.kt
#	Android/APIExample-Compose/app/src/main/java/io/agora/api/example/compose/samples/JoinChannelVideoToken.kt
#	Android/APIExample-Compose/app/src/main/java/io/agora/api/example/compose/samples/JoinMultiChannel.kt
#	Android/APIExample-Compose/app/src/main/java/io/agora/api/example/compose/samples/LiveStreaming.kt
#	Android/APIExample-Compose/app/src/main/java/io/agora/api/example/compose/samples/LocalVideoTranscoding.kt
#	Android/APIExample-Compose/app/src/main/java/io/agora/api/example/compose/samples/MediaMetadata.kt
#	Android/APIExample-Compose/app/src/main/java/io/agora/api/example/compose/samples/MediaPlayer.kt
#	Android/APIExample-Compose/app/src/main/java/io/agora/api/example/compose/samples/MediaRecorder.kt
#	Android/APIExample-Compose/app/src/main/java/io/agora/api/example/compose/samples/OriginAudioData.kt
#	Android/APIExample-Compose/app/src/main/java/io/agora/api/example/compose/samples/OriginVideoData.kt
#	Android/APIExample-Compose/app/src/main/java/io/agora/api/example/compose/samples/PlayAudioFiles.kt
#	Android/APIExample-Compose/app/src/main/java/io/agora/api/example/compose/samples/PreCallTest.kt
#	Android/APIExample-Compose/app/src/main/java/io/agora/api/example/compose/samples/RTMPStreaming.kt
#	Android/APIExample-Compose/app/src/main/java/io/agora/api/example/compose/samples/RhythmPlayer.kt
#	Android/APIExample-Compose/app/src/main/java/io/agora/api/example/compose/samples/ScreenSharing.kt
#	Android/APIExample-Compose/app/src/main/java/io/agora/api/example/compose/samples/SendDataStream.kt
#	Android/APIExample-Compose/app/src/main/java/io/agora/api/example/compose/samples/VideoProcessExtension.kt
#	Android/APIExample-Compose/app/src/main/java/io/agora/api/example/compose/samples/VoiceEffects.kt
#	Android/APIExample-Compose/app/src/main/java/io/agora/api/example/compose/ui/common/Widgets.kt
#	Android/APIExample-Compose/app/src/main/java/io/agora/api/example/compose/ui/example/Example.kt
#	Android/APIExample-Compose/app/src/main/java/io/agora/api/example/compose/ui/settings/Settings.kt
#	Android/APIExample-Compose/app/src/main/java/io/agora/api/example/compose/utils/TokenUtils.java
#	Android/APIExample-Compose/app/src/main/java/io/agora/api/example/compose/utils/YuvFboProgram.java
#	Android/APIExample-Compose/app/src/main/res/values-zh/strings.xml
#	Android/APIExample-Compose/app/src/main/res/values/strings.xml
#	Android/APIExample-Compose/gradle/libs.versions.toml
#	Android/APIExample/app/build.gradle
#	Android/APIExample/app/src/main/java/io/agora/api/example/examples/advanced/LiveStreaming.java
#	Android/APIExample/app/src/main/java/io/agora/api/example/examples/advanced/beauty/ByteDanceBeautySDK.kt
#	Android/APIExample/app/src/main/java/io/agora/api/example/examples/advanced/videoRender/YuvFboProgram.java
#	Android/APIExample/app/src/main/java/io/agora/beautyapi/bytedance/utils/AgoraImageHelper.kt
#	Android/APIExample/app/src/main/java/io/agora/beautyapi/faceunity/utils/egl/GLFrameBuffer.java
#	Android/APIExample/app/src/main/java/io/agora/beautyapi/sensetime/utils/egl/GLFrameBuffer.java
#	Android/APIExample/app/src/main/res/values-zh/strings.xml
#	Android/APIExample/app/src/main/res/values/strings.xml
#	iOS/APIExample-Audio/Podfile
#	iOS/APIExample-OC/Podfile
#	iOS/APIExample/APIExample.xcodeproj/project.pbxproj
#	iOS/APIExample/APIExample/Common/AgoraExtension.swift
#	iOS/APIExample/APIExample/Examples/Advanced/LiveStreaming/Base.lproj/LiveStreaming.storyboard
#	iOS/APIExample/APIExample/Examples/Advanced/LiveStreaming/LiveStreaming.swift
#	iOS/APIExample/APIExample/Examples/Advanced/LiveStreaming/zh-Hans.lproj/LiveStreaming.strings
#	iOS/APIExample/APIExample/Examples/Advanced/LocalCompositeGraph/Base.lproj/LocalCompositeGraph.storyboard
#	iOS/APIExample/APIExample/Examples/Advanced/MediaChannelRelay/MediaChannelRelay.swift
#	iOS/APIExample/APIExample/Examples/Advanced/PictureInPicture/PictureInPicture.swift
#	iOS/APIExample/APIExample/Examples/Advanced/RawAudioData/RawAudioData.swift
#	iOS/APIExample/APIExample/Info.plist
#	iOS/APIExample/APIExample/zh-Hans.lproj/Localizable.strings
#	iOS/APIExample/Podfile
#	macOS/APIExample/Examples/Advanced/LiveStreaming/Base.lproj/LiveStreaming.storyboard
#	macOS/APIExample/Examples/Advanced/LiveStreaming/LiveStreaming.swift
#	macOS/APIExample/Examples/Advanced/LiveStreaming/zh-Hans.lproj/LiveStreaming.strings
#	macOS/Podfile
#	windows/APIExample/APIExample/APIExample.vcxproj
#	windows/APIExample/APIExample/APIExample.vcxproj.filters
#	windows/APIExample/APIExample/Basic/LiveBroadcasting/CLiveBroadcastingDlg.cpp
#	windows/APIExample/APIExample/Language.h
#	windows/APIExample/APIExample/en.ini
#	windows/APIExample/APIExample/stdafx.cpp
#	windows/APIExample/APIExample/zh-cn.ini
#	windows/APIExample/install.ps1
  • Loading branch information
qinhui committed Oct 10, 2024
2 parents 97f7c01 + d77982f commit d54e0a9
Show file tree
Hide file tree
Showing 369 changed files with 19,085 additions and 4,184 deletions.
15 changes: 13 additions & 2 deletions .github/ci/build/build_android.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -47,10 +47,21 @@ def doPublish(buildVariables) {
"archivePattern": "*.zip",
"serverPath": "ApiExample/${shortVersion}/${buildVariables.buildDate}/${env.platform}",
"serverRepo": "SDK_repo"
],
[
"type": "ARTIFACTORY",
"archivePattern": "*.apk",
"serverPath": "ApiExample/${shortVersion}/${buildVariables.buildDate}/${env.platform}",
"serverRepo": "SDK_repo"
]
]
archive.archiveFiles(archiveInfos)
sh "rm -rf *.zip || true"
archiveUrls = archive.archiveFiles(archiveInfos) ?: []
archiveUrls = archiveUrls as Set
if (archiveUrls) {
def content = archiveUrls.join("\n")
writeFile(file: 'package_urls', text: content, encoding: "utf-8")
}
sh "rm -rf *.zip *.apk || true"
}

pipelineLoad(this, "ApiExample", "build", "android", "apiexample_linux")
60 changes: 12 additions & 48 deletions .github/ci/build/build_android.sh
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,6 @@ echo short_version: $short_version
echo pwd: `pwd`
echo sdk_url: $sdk_url

ls ~/.gradle || (mkdir -p /tmp/.gradle && ln -s /tmp/.gradle ~/.gradle && touch ~/.gradle/ln_$(date "+%y%m%d%H") && ls ~/.gradle)

zip_name=${sdk_url##*/}
echo zip_name: $zip_name

Expand All @@ -67,55 +65,21 @@ rm -rf ./$unzip_name/rtc/demo
rm ./$unzip_name/rtc/commits
rm ./$unzip_name/rtc/package_size_report.txt
mkdir ./$unzip_name/rtc/samples
mkdir ./$unzip_name/rtc/samples/API-example

if [ ! -z "$(echo $sdk_url | grep 'audio')" ] || [ ! -z "$(echo $sdk_url | grep 'VOICE')" ]
then
audio_suffix=-Audio
else
audio_suffix=
fi
echo audio_suffix: $audio_suffix

cp -rf ./Android/APIExample${audio_suffix}/** ./$unzip_name/rtc/samples/API-example
cp -rf ./Android/${android_direction} ./$unzip_name/rtc/samples/API-Example || exit 1
7za a -tzip result.zip -r $unzip_name > log.txt
mv result.zip $WORKSPACE/withAPIExample_$(date "+%d%H%M")_$zip_name
mv result.zip $WORKSPACE/withAPIExample_${BUILD_NUMBER}_$zip_name

# install android sdk
which java
java --version
source ~/.bashrc
export ANDROID_HOME=/usr/lib/android_sdk
echo ANDROID_HOME: $ANDROID_HOME

# compile apk
cd ./$unzip_name/rtc/samples/API-example
pwd

## config appId
sed -i -e "s#YOUR APP ID#${APP_ID}#g" app/src/main/res/values/string_configs.xml
sed -i -e "s#YOUR APP CERTIFICATE##g" app/src/main/res/values/string_configs.xml
sed -i -e "s#YOUR ACCESS TOKEN##g" app/src/main/res/values/string_configs.xml
rm -f app/src/main/res/values/string_configs.xml-e
cat app/src/main/res/values/string_configs.xml

## config simple filter
sed -i -e "s#simpleFilter = false#simpleFilter = true#g" gradle.properties
mkdir -p agora-simple-filter/src/main/agoraLibs
cp -r ../../sdk/arm64-v8a agora-simple-filter/src/main/agoraLibs/
cp -r ../../sdk/armeabi-v7a agora-simple-filter/src/main/agoraLibs/
curl -o opencv4.zip https://agora-adc-artifacts.s3.cn-north-1.amazonaws.com.cn/androidLibs/opencv4.zip
unzip opencv4.zip
mkdir -p agora-simple-filter/src/main/libs
mv arm64-v8a agora-simple-filter/src/main/libs
mv armeabi-v7a agora-simple-filter/src/main/libs
sed -i -e "s#jniLibs/#libs/#g" agora-simple-filter/src/main/cpp/CMakeLists.txt
if [ $compile_project = true ]; then
# install android sdk
which java
java --version
source ~/.bashrc
export ANDROID_HOME=/usr/lib/android_sdk
echo ANDROID_HOME: $ANDROID_HOME
cd ./$unzip_name/rtc/samples/API-Example || exit 1
./cloud_build.sh || exit 1
fi

./gradlew clean || exit 1
./gradlew :app:assembleDebug || exit 1
cp app/build/outputs/apk/debug/app-debug.apk ./APIExample_Android_$(date "+%y%m%d%H").apk
7za a -tzip result.zip -r *.apk > log.txt
mv result.zip $WORKSPACE/APIExample_Android${audio_suffix}_$(date "+%y%m%d%H%M")_apk.zip
ls $WORKSPACE
cd -

8 changes: 7 additions & 1 deletion .github/ci/build/build_ios.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -44,10 +44,16 @@ def doPublish(buildVariables) {
"archivePattern": "*.zip",
"serverPath": "ApiExample/${shortVersion}/${buildVariables.buildDate}/${env.platform}",
"serverRepo": "SDK_repo" // ATTENTIONS: Update the artifactoryRepo if needed.
],
[
"type": "ARTIFACTORY",
"archivePattern": "*.ipa",
"serverPath": "ApiExample/${shortVersion}/${buildVariables.buildDate}/${env.platform}",
"serverRepo": "SDK_repo" // ATTENTIONS: Update the artifactoryRepo if needed.
]
]
archive.archiveFiles(archiveInfos)
sh "rm -rf *.zip || true"
sh "rm -rf *.zip *.ipa || true"
}

pipelineLoad(this, "ApiExample", "build", "ios", "apiexample_mac")
76 changes: 15 additions & 61 deletions .github/ci/build/build_ios.sh
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@
# others: Rename the zip package name yourself, But need copy it to workspace dir
##################################

echo is_generate_validate_app: $is_generate_validate_app
echo ios_direction: $ios_direction
echo Package_Publish: $Package_Publish
echo is_tag_fetch: $is_tag_fetch
echo arch: $arch
Expand All @@ -55,75 +55,29 @@ echo sdk_url: $sdk_url
zip_name=${sdk_url##*/}
echo zip_name: $zip_name

python3 $WORKSPACE/artifactory_utils.py --action=download_file --file=$sdk_url
7za x ./$zip_name -y
curl -o $zip_name $sdk_url || exit 1
7za x ./$zip_name -y > log.txt

unzip_name=`ls -S -d */ | grep Agora`
unzip_name=`ls -S -d */ | grep Agora | sed 's/\///g'`
echo unzip_name: $unzip_name

rm -rf ./$unzip_name/bin
rm ./$unzip_name/commits
rm ./$unzip_name/package_size_report.txt
mkdir ./$unzip_name/samples
mkdir ./$unzip_name/samples/API-Example
if [ $? -eq 0 ]; then
echo "success"
else
echo "failed"
exit 1
fi

cp -rf ./iOS/** ./$unzip_name/samples/API-Example
cp -rf ./iOS/${ios_direction} ./$unzip_name/samples/API-Example || exit 1
ls -al ./$unzip_name/samples/API-Example/
mv ./$unzip_name/samples/API-Example/sdk.podspec ./$unzip_name/ || exit 1
python3 ./.github/ci/build/modify_podfile.py ./$unzip_name/samples/API-Example/Podfile || exit 1


result=$(echo $sdk_url | grep "VOICE")
if [ ! -z "$result" ]
then
echo "包含"
rm -rf ./$unzip_name/samples/API-Example/APIExample
rm -rf ./$unzip_name/samples/API-Example/APIExample-OC
mv ./$unzip_name/samples/API-Example/APIExample-Audio ./$unzip_name/samples/APIExample-Audio
mv ./$unzip_name/samples/APIExample-Audio/sdk.podspec ./$unzip_name/
python3 ./.github/ci/build/modify_podfile.py ./$unzip_name/samples/APIExample-Audio/Podfile
if [ $? -eq 0 ]; then
echo "success"
else
echo "failed"
exit 1
fi
if [ $is_generate_validate_app = true ]; then
./.github/ci/build/build_ios_ipa.sh ./$unzip_name/samples/APIExample-Audio
fi
7za a -tzip result.zip -r $unzip_name > log.txt
mv result.zip $WORKSPACE/withAPIExample_${BUILD_NUMBER}_$zip_name

else
echo "不包含"
rm -rf ./$unzip_name/samples/API-Example/APIExample-Audio
if [ $is_objective_c = true ]; then
rm -rf ./$unzip_name/samples/API-Example/APIExample
mv ./$unzip_name/samples/API-Example/APIExample-OC ./$unzip_name/samples/APIExample-OC
mv ./$unzip_name/samples/APIExample-OC/sdk.podspec ./$unzip_name/
python3 ./.github/ci/build/modify_podfile.py ./$unzip_name/samples/APIExample-OC/Podfile
else
rm -rf ./$unzip_name/samples/API-Example/APIExample-OC
mv ./$unzip_name/samples/API-Example/APIExample ./$unzip_name/samples/APIExample
mv ./$unzip_name/samples/APIExample/sdk.podspec ./$unzip_name/
python3 ./.github/ci/build/modify_podfile.py ./$unzip_name/samples/APIExample/Podfile
fi

if [ $? -eq 0 ]; then
echo "success"
else
echo "failed"
exit 1
fi
if [ $is_generate_validate_app = true ]; then
if [ $is_objective_c = true ]; then
./.github/ci/build/build_ios_ipa.sh ./$unzip_name/samples/APIExample-OC
else
./.github/ci/build/build_ios_ipa.sh ./$unzip_name/samples/APIExample
fi
fi
if [ $compile_project = true ]; then
cd ./$unzip_name/samples/API-Example
./cloud_build.sh || exit 1
cd -
fi

rm -rf ./$unzip_name/samples/API-Example
7za a -tzip result.zip -r $unzip_name
cp result.zip $WORKSPACE/withAPIExample_${BUILD_NUMBER}_$zip_name
10 changes: 7 additions & 3 deletions .github/ci/build/build_ios_ipa.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@ CURRENT_PATH=$PWD

# 获取项目目录
PROJECT_PATH="$( cd "$1" && pwd )"
IS_OBJECTIVE_C=false
if [ "$ios_direction" = "APIExample-OC" ]; then
IS_OBJECTIVE_C=true
fi

cd ${PROJECT_PATH} && pod install

Expand All @@ -13,10 +17,10 @@ else
fi

# 项目target名
TARGET_NAME=${PROJECT_PATH##*/}
TARGET_NAME=$ios_direction

KEYCENTER_PATH=${PROJECT_PATH}"/"${TARGET_NAME}"/Common/KeyCenter.swift"
if [ $is_objective_c = true ]; then
if [ $IS_OBJECTIVE_C = true ]; then
KEYCENTER_PATH=${PROJECT_PATH}"/"${TARGET_NAME}"/Common/KeyCenter.m"
fi

Expand All @@ -31,7 +35,7 @@ PBXPROJ_PATH="${PROJECT_PATH}/${TARGET_NAME}.xcodeproj/project.pbxproj"
echo PBXPROJ_PATH: $PBXPROJ_PATH

# 主项目工程配置
if [ $is_objective_c = true ]; then
if [ $IS_OBJECTIVE_C = true ]; then
# Debug
/usr/libexec/PlistBuddy -c "Set :objects:E70ADE062A5D0050009947CF:buildSettings:CODE_SIGN_STYLE 'Manual'" $PBXPROJ_PATH
/usr/libexec/PlistBuddy -c "Set :objects:E70ADE062A5D0050009947CF:buildSettings:DEVELOPMENT_TEAM 'GM72UGLGZW'" $PBXPROJ_PATH
Expand Down
29 changes: 14 additions & 15 deletions .github/ci/build/build_mac.sh
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@
# others: Rename the zip package name yourself, But need copy it to workspace dir
##################################

echo is_generate_validate_app:$is_generate_validate_app
echo compile_project:$compile_project
echo Package_Publish: $Package_Publish
echo is_tag_fetch: $is_tag_fetch
echo arch: $arch
Expand All @@ -54,8 +54,8 @@ echo sdk_url: $sdk_url
zip_name=${sdk_url##*/}
echo zip_name: $zip_name

python3 $WORKSPACE/artifactory_utils.py --action=download_file --file=$sdk_url
7za x ./$zip_name -y
curl -o $zip_name $sdk_url || exit 1
7za x ./$zip_name -y > log.txt

unzip_name=`ls -S -d */ | grep Agora`
echo unzip_name: $unzip_name
Expand All @@ -64,21 +64,20 @@ rm -rf ./$unzip_name/bin
rm ./$unzip_name/commits
rm ./$unzip_name/package_size_report.txt
mkdir ./$unzip_name/samples
mkdir ./$unzip_name/samples/APIExample
if [ $? -eq 0 ]; then
echo "success"
else
echo "failed"
exit 1
fi
cp -a ./macOS/** ./$unzip_name/samples/APIExample


cp -rf ./macOS ./$unzip_name/samples/APIExample || exit 1
ls -al ./$unzip_name/samples/API-Example/
mv ./$unzip_name/samples/APIExample/sdk.podspec ./$unzip_name/
python3 ./.github/ci/build/modify_podfile.py ./$unzip_name/samples/APIExample/Podfile

7za a -tzip result.zip -r $unzip_name
cp result.zip $WORKSPACE/withAPIExample_${BUILD_NUMBER}_$zip_name

if [ $is_generate_validate_app = true ]; then
./.github/ci/build/build_mac_ipa.sh ./$unzip_name/samples/APIExample
if [ $compile_project = true ]; then
cd ./$unzip_name/samples/APIExample
./cloud_build.sh || exit 1
cd -
fi

7za a -tzip result.zip -r $unzip_name
cp result.zip $WORKSPACE/withAPIExample_${BUILD_NUMBER}_$zip_name

13 changes: 5 additions & 8 deletions .github/ci/build/build_windows.bat
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ REM pr: output test.zip to workspace dir
REM others: Rename the zip package name yourself, But need copy it to workspace dir
REM ##################################

echo compile_project: %compile_project%
echo Package_Publish: %Package_Publish%
echo is_tag_fetch: %is_tag_fetch%
echo arch: %arch%
Expand Down Expand Up @@ -84,15 +85,11 @@ xcopy /Y /E windows\README.zh.md Agora_Native_SDK_for_Windows_FULL\samples\API-e
rmdir /S /Q Agora_Native_SDK_for_Windows_FULL\samples\API-example\APIExample\APIExample
dir Agora_Native_SDK_for_Windows_FULL\samples\API-example\APIExample
7z a -tzip result.zip -r Agora_Native_SDK_for_Windows_FULL
copy result.zip %WORKSPACE%\\withAPIExample_%date:~4,2%%date:~7,2%%time:~0,2%%time:~3,2%_%zip_name%
copy result.zip %WORKSPACE%\\withAPIExample_%BUILD_NUMBER%_%zip_name%
del /F result.zip
del /F %WORKSPACE%\\%zip_name%

if %compile_project% EQU false goto FINAL
cd Agora_Native_SDK_for_Windows_FULL\samples\API-example
echo "compile start..."
call installThirdParty.bat
"C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\Bin\MSBuild.exe" "APIExample.sln" /p:platform="Win32" /p:configuration="Release"
7z a -tzip result.zip -r Release
copy result.zip %WORKSPACE%\\APIExample_windows_%date:~4,2%%date:~7,2%%time:~0,2%%time:~3,2%_Release_exe.zip
del /F result.zip
echo "compile done."
call cloud_build.bat
:FINAL
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
xcuserdata
.DS_Store
AgoraRtcKit.framework
*/libs
1 change: 1 addition & 0 deletions Android/APIExample-Audio/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ To build and run the sample application, get an App Id:
// assign token and certificate to null if you have not enabled app certificate
<string name="agora_app_certificate" translatable="false">YOUR APP CERTIFICATE</string>
// assign token and certificate to null if you have not enabled app certificate or you have set the certificate above.
// PS:It is unsafe to place the App Certificate on the client side, it is recommended to place it on the server side to ensure that the App Certificate is not leaked.
<string name="agora_access_token" translatable="false">YOUR ACCESS TOKEN</string>
```
Expand Down
1 change: 1 addition & 0 deletions Android/APIExample-Audio/README.zh.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
// 如果你没有打开Token功能,certificate可以直接不填
<string name="agora_app_certificate" translatable="false">YOUR APP CERTIFICATE</string>
// 如果你没有打开Token功能或者已经配置了certificate,token可以直接不填
// 注意:App证书放在客户端不安全,推荐放在服务端以确保 App 证书不会泄露。
<string name="agora_access_token" translatable="false">YOUR ACCESS TOKEN</string>
```
Expand Down
Loading

0 comments on commit d54e0a9

Please sign in to comment.