Fangjun Kuang
Committed by GitHub

Specify ABIs when building APKs (#2488)

This PR improves Android APK build process by specifying target ABIs during gradle assembly and fixing arithmetic precision issues in decoder calculations. The changes ensure that APKs are built for specific architectures rather than all architectures at once, and correct integer division operations that could lead to precision loss.

- Adds ABI-specific gradle build parameters to target specific architectures during APK assembly
- Updates APK output paths from outputs/apk to intermediates/apk to match gradle's ABI-filtered build structure
- Fixes integer division precision issues in decoder calculations by using floating-point division
... ... @@ -104,10 +104,10 @@ for arch in arm64-v8a armeabi-v7a x86_64 x86; do
pushd ./android/SherpaOnnx2Pass
sed -i.bak s/2048/9012/g ./gradle.properties
git diff ./gradle.properties
./gradlew assembleRelease
./gradlew assembleRelease -Pandroid.injected.build.abi=$arch
popd
mv android/SherpaOnnx2Pass/app/build/outputs/apk/release/app-release-unsigned.apk ./apks/sherpa-onnx-${SHERPA_ONNX_VERSION}-$arch-asr_2pass-$lang1-${short_name1}_${short_name2}.apk
mv android/SherpaOnnx2Pass/app/build/intermediates/apk/release/app-release-unsigned.apk ./apks/sherpa-onnx-${SHERPA_ONNX_VERSION}-$arch-asr_2pass-$lang1-${short_name1}_${short_name2}.apk
ls -lh apks
rm -v ./android/SherpaOnnx2Pass/app/src/main/jniLibs/$arch/*.so
done
... ...
... ... @@ -82,10 +82,10 @@ for arch in arm64-v8a armeabi-v7a x86_64 x86; do
pushd ./android/SherpaOnnx
sed -i.bak s/2048/9012/g ./gradle.properties
git diff ./gradle.properties
./gradlew assembleRelease
./gradlew assembleRelease -Pandroid.injected.build.abi=$arch
popd
mv android/SherpaOnnx/app/build/outputs/apk/release/app-release-unsigned.apk ./apks/sherpa-onnx-${SHERPA_ONNX_VERSION}-$arch-asr-$lang-$short_name.apk
mv android/SherpaOnnx/app/build/intermediates/apk/release/app-release-unsigned.apk ./apks/sherpa-onnx-${SHERPA_ONNX_VERSION}-$arch-asr-$lang-$short_name.apk
ls -lh apks
rm -v ./android/SherpaOnnx/app/src/main/jniLibs/$arch/*.so
done
... ...
... ... @@ -75,10 +75,10 @@ for arch in arm64-v8a armeabi-v7a x86_64 x86; do
pushd ./android/SherpaOnnxAudioTaggingWearOs
sed -i.bak s/2048/9012/g ./gradle.properties
git diff ./gradle.properties
./gradlew assembleRelease
./gradlew assembleRelease -Pandroid.injected.build.abi=$arch
popd
mv android/SherpaOnnxAudioTaggingWearOs/app/build/outputs/apk/release/app-release-unsigned.apk ./apks/sherpa-onnx-${SHERPA_ONNX_VERSION}-$arch-audio-tagging-$short_name-wearos.apk
mv android/SherpaOnnxAudioTaggingWearOs/app/build/intermediates/apk/release/app-release-unsigned.apk ./apks/sherpa-onnx-${SHERPA_ONNX_VERSION}-$arch-audio-tagging-$short_name-wearos.apk
ls -lh apks
rm -v ./android/SherpaOnnxAudioTaggingWearOs/app/src/main/jniLibs/$arch/*.so
done
... ...
... ... @@ -74,10 +74,10 @@ for arch in arm64-v8a armeabi-v7a x86_64 x86; do
pushd ./android/SherpaOnnxAudioTagging
sed -i.bak s/2048/9012/g ./gradle.properties
git diff ./gradle.properties
./gradlew assembleRelease
./gradlew assembleRelease -Pandroid.injected.build.abi=$arch
popd
mv android/SherpaOnnxAudioTagging/app/build/outputs/apk/release/app-release-unsigned.apk ./apks/sherpa-onnx-${SHERPA_ONNX_VERSION}-$arch-audio-tagging-$short_name.apk
mv android/SherpaOnnxAudioTagging/app/build/intermediates/apk/release/app-release-unsigned.apk ./apks/sherpa-onnx-${SHERPA_ONNX_VERSION}-$arch-audio-tagging-$short_name.apk
ls -lh apks
rm -v ./android/SherpaOnnxAudioTagging/app/src/main/jniLibs/$arch/*.so
done
... ...
... ... @@ -77,10 +77,10 @@ for arch in arm64-v8a armeabi-v7a x86_64 x86; do
pushd ./android/SherpaOnnxKws
sed -i.bak s/2048/9012/g ./gradle.properties
git diff ./gradle.properties
./gradlew assembleRelease
./gradlew assembleRelease -Pandroid.injected.build.abi=$arch
popd
mv android/SherpaOnnxKws/app/build/outputs/apk/release/app-release-unsigned.apk ./apks/sherpa-onnx-${SHERPA_ONNX_VERSION}-$arch-kws-zh-wenetspeech-zipformer.apk
mv android/SherpaOnnxKws/app/build/intermediates/apk/release/app-release-unsigned.apk ./apks/sherpa-onnx-${SHERPA_ONNX_VERSION}-$arch-kws-zh-wenetspeech-zipformer.apk
ls -lh apks
rm -v ./android/SherpaOnnxKws/app/src/main/jniLibs/$arch/*.so
... ... @@ -138,10 +138,10 @@ for arch in arm64-v8a armeabi-v7a x86_64 x86; do
pushd ./android/SherpaOnnxKws
sed -i.bak s/2048/9012/g ./gradle.properties
git diff ./gradle.properties
./gradlew assembleRelease
./gradlew assembleRelease -Pandroid.injected.build.abi=$arch
popd
mv android/SherpaOnnxKws/app/build/outputs/apk/release/app-release-unsigned.apk ./apks/sherpa-onnx-${SHERPA_ONNX_VERSION}-$arch-kws-en-gigaspeech-zipformer.apk
mv android/SherpaOnnxKws/app/build/intermediates/apk/release/app-release-unsigned.apk ./apks/sherpa-onnx-${SHERPA_ONNX_VERSION}-$arch-kws-en-gigaspeech-zipformer.apk
ls -lh apks
rm -v ./android/SherpaOnnxKws/app/src/main/jniLibs/$arch/*.so
done
... ...
... ... @@ -78,10 +78,10 @@ for arch in arm64-v8a armeabi-v7a x86_64 x86; do
pushd ./android/SherpaOnnxSpokenLanguageIdentification
sed -i.bak s/2048/9012/g ./gradle.properties
git diff ./gradle.properties
./gradlew assembleRelease
./gradlew assembleRelease -Pandroid.injected.build.abi=$arch
popd
mv android/SherpaOnnxSpokenLanguageIdentification/app/build/outputs/apk/release/app-release-unsigned.apk ./apks/sherpa-onnx-${SHERPA_ONNX_VERSION}-$arch-slid-$short_name.apk
mv android/SherpaOnnxSpokenLanguageIdentification/app/build/intermediates/apk/release/app-release-unsigned.apk ./apks/sherpa-onnx-${SHERPA_ONNX_VERSION}-$arch-slid-$short_name.apk
ls -lh apks
rm -v ./android/SherpaOnnxSpokenLanguageIdentification/app/src/main/jniLibs/$arch/*.so
done
... ...
... ... @@ -73,10 +73,10 @@ for arch in arm64-v8a armeabi-v7a x86_64 x86; do
cp -v ./build-android-$src_arch/install/lib/*.so ./android/SherpaOnnxSpeakerDiarization/app/src/main/jniLibs/$arch/
pushd ./android/SherpaOnnxSpeakerDiarization
./gradlew build
./gradlew assembleRelease -Pandroid.injected.build.abi=$arch
popd
mv android/SherpaOnnxSpeakerDiarization/app/build/outputs/apk/debug/app-debug.apk ./apks/sherpa-onnx-${SHERPA_ONNX_VERSION}-$arch-speaker-diarization-$segmentation_short_name-$embedding_short_name.apk
mv android/SherpaOnnxSpeakerDiarization/app/build/intermediates/apk/release/app-release-unsigned.apk ./apks/sherpa-onnx-${SHERPA_ONNX_VERSION}-$arch-speaker-diarization-$segmentation_short_name-$embedding_short_name.apk
ls -lh apks
rm -v ./android/SherpaOnnxSpeakerDiarization/app/src/main/jniLibs/$arch/*.so
done
... ...
... ... @@ -69,10 +69,10 @@ for arch in arm64-v8a armeabi-v7a x86_64 x86; do
pushd ./android/SherpaOnnxSpeakerIdentification
sed -i.bak s/2048/9012/g ./gradle.properties
git diff ./gradle.properties
./gradlew build
./gradlew assembleRelease -Pandroid.injected.build.abi=$arch
popd
mv android/SherpaOnnxSpeakerIdentification/app/build/outputs/apk/debug/app-debug.apk ./apks/sherpa-onnx-${SHERPA_ONNX_VERSION}-$arch-$lang-speaker-identification-$framework-$short_name.apk
mv android/SherpaOnnxSpeakerIdentification/app/build/intermediates/apk/release/app-release-unsigned.apk ./apks/sherpa-onnx-${SHERPA_ONNX_VERSION}-$arch-$lang-speaker-identification-$framework-$short_name.apk
ls -lh apks
rm -v ./android/SherpaOnnxSpeakerIdentification/app/src/main/jniLibs/$arch/*.so
done
... ...
... ... @@ -141,10 +141,10 @@ for arch in arm64-v8a armeabi-v7a x86_64 x86; do
pushd ./android/SherpaOnnxTtsEngine
sed -i.bak s/2048/9012/g ./gradle.properties
git diff ./gradle.properties
./gradlew assembleRelease
./gradlew assembleRelease -Pandroid.injected.build.abi=$arch
popd
mv android/SherpaOnnxTtsEngine/app/build/outputs/apk/release/app-release-unsigned.apk ./apks/sherpa-onnx-${SHERPA_ONNX_VERSION}-$arch-$lang-tts-engine-$model_dir.apk
mv android/SherpaOnnxTtsEngine/app/build/intermediates/apk/release/app-release-unsigned.apk ./apks/sherpa-onnx-${SHERPA_ONNX_VERSION}-$arch-$lang-tts-engine-$model_dir.apk
ls -lh apks
rm -v ./android/SherpaOnnxTtsEngine/app/src/main/jniLibs/$arch/*.so
done
... ...
... ... @@ -134,10 +134,10 @@ for arch in arm64-v8a armeabi-v7a x86_64 x86; do
pushd ./android/SherpaOnnxTts
sed -i.bak s/2048/9012/g ./gradle.properties
git diff ./gradle.properties
./gradlew assembleRelease
./gradlew assembleRelease -Pandroid.injected.build.abi=$arch
popd
mv android/SherpaOnnxTts/app/build/outputs/apk/release/app-release-unsigned.apk ./apks/sherpa-onnx-${SHERPA_ONNX_VERSION}-$arch-$lang-tts-$model_dir.apk
mv android/SherpaOnnxTts/app/build/intermediates/apk/release/app-release-unsigned.apk ./apks/sherpa-onnx-${SHERPA_ONNX_VERSION}-$arch-$lang-tts-$model_dir.apk
ls -lh apks
rm -v ./android/SherpaOnnxTts/app/src/main/jniLibs/$arch/*.so
done
... ...
... ... @@ -103,10 +103,11 @@ for arch in arm64-v8a armeabi-v7a x86_64 x86; do
pushd ./android/SherpaOnnxSimulateStreamingAsr
sed -i.bak s/2048/9012/g ./gradle.properties
git diff ./gradle.properties
./gradlew assembleRelease
./gradlew assembleRelease -Pandroid.injected.build.abi=$arch
popd
mv android/SherpaOnnxSimulateStreamingAsr/app/build/outputs/apk/release/app-release-unsigned.apk ./apks/sherpa-onnx-${SHERPA_ONNX_VERSION}-$arch-simulated_streaming_asr-$lang-$short_name.apk
find . -name "*.apk"
mv android/SherpaOnnxSimulateStreamingAsr/app/build/intermediates/apk/release/app-release-unsigned.apk ./apks/sherpa-onnx-${SHERPA_ONNX_VERSION}-$arch-simulated_streaming_asr-$lang-$short_name.apk
ls -lh apks
rm -v ./android/SherpaOnnxSimulateStreamingAsr/app/src/main/jniLibs/$arch/*.so
done
... ...
... ... @@ -83,10 +83,10 @@ for arch in arm64-v8a armeabi-v7a x86_64 x86; do
pushd ./android/SherpaOnnxVadAsr
sed -i.bak s/2048/9012/g ./gradle.properties
git diff ./gradle.properties
./gradlew assembleRelease
./gradlew assembleRelease -Pandroid.injected.build.abi=$arch
popd
mv android/SherpaOnnxVadAsr/app/build/outputs/apk/release/app-release-unsigned.apk ./apks/sherpa-onnx-${SHERPA_ONNX_VERSION}-$arch-vad_asr-$lang-$short_name.apk
mv android/SherpaOnnxVadAsr/app/build/intermediates/apk/release/app-release-unsigned.apk ./apks/sherpa-onnx-${SHERPA_ONNX_VERSION}-$arch-vad_asr-$lang-$short_name.apk
ls -lh apks
rm -v ./android/SherpaOnnxVadAsr/app/src/main/jniLibs/$arch/*.so
done
... ...
... ... @@ -58,10 +58,10 @@ for arch in arm64-v8a armeabi-v7a x86_64 x86; do
pushd ./android/SherpaOnnxVad
sed -i.bak s/2048/9012/g ./gradle.properties
git diff ./gradle.properties
./gradlew assembleRelease
./gradlew assembleRelease -Pandroid.injected.build.abi=$arch
popd
mv android/SherpaOnnxVad/app/build/outputs/apk/release/app-release-unsigned.apk ./apks/sherpa-onnx-${SHERPA_ONNX_VERSION}-$arch-silero_vad.apk
mv android/SherpaOnnxVad/app/build/intermediates/apk/release/app-release-unsigned.apk ./apks/sherpa-onnx-${SHERPA_ONNX_VERSION}-$arch-silero_vad.apk
ls -lh apks
rm -v ./android/SherpaOnnxVad/app/src/main/jniLibs/$arch/*.so
done
... ... @@ -101,10 +101,10 @@ for arch in arm64-v8a armeabi-v7a x86_64 x86; do
pushd ./android/SherpaOnnxVad
sed -i.bak s/2048/9012/g ./gradle.properties
git diff ./gradle.properties
./gradlew assembleRelease
./gradlew assembleRelease -Pandroid.injected.build.abi=$arch
popd
mv android/SherpaOnnxVad/app/build/outputs/apk/release/app-release-unsigned.apk ./apks/sherpa-onnx-${SHERPA_ONNX_VERSION}-$arch-ten_vad.apk
mv android/SherpaOnnxVad/app/build/intermediates/apk/release/app-release-unsigned.apk ./apks/sherpa-onnx-${SHERPA_ONNX_VERSION}-$arch-ten_vad.apk
ls -lh apks
rm -v ./android/SherpaOnnxVad/app/src/main/jniLibs/$arch/*.so
done
... ...
... ... @@ -55,7 +55,7 @@ OfflineFireRedAsrGreedySearchDecoder::Decode(Ort::Value cross_k,
std::move(offset)};
// assume at most 6 tokens per second
int32_t num_possible_tokens = num_feature_frames / 100 * 6;
int32_t num_possible_tokens = num_feature_frames / 100.0 * 6;
num_possible_tokens =
std::min<int32_t>(num_possible_tokens, meta_data.max_len / 2);
... ...
... ... @@ -102,7 +102,7 @@ OfflineWhisperGreedySearchDecoder::Decode(Ort::Value cross_k,
std::vector<int32_t> predicted_tokens;
// assume at most 6 tokens per second
int32_t num_possible_tokens = num_feature_frames / 100 * 6;
int32_t num_possible_tokens = num_feature_frames / 100.0 * 6;
num_possible_tokens = std::min<int32_t>(num_possible_tokens, n_text_ctx / 2);
for (int32_t i = 0; i < num_possible_tokens; ++i) {
... ...