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 @@ -104,10 +104,10 @@ for arch in arm64-v8a armeabi-v7a x86_64 x86; do
104 pushd ./android/SherpaOnnx2Pass 104 pushd ./android/SherpaOnnx2Pass
105 sed -i.bak s/2048/9012/g ./gradle.properties 105 sed -i.bak s/2048/9012/g ./gradle.properties
106 git diff ./gradle.properties 106 git diff ./gradle.properties
107 - ./gradlew assembleRelease 107 + ./gradlew assembleRelease -Pandroid.injected.build.abi=$arch
108 popd 108 popd
109 109
110 - 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 110 + 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
111 ls -lh apks 111 ls -lh apks
112 rm -v ./android/SherpaOnnx2Pass/app/src/main/jniLibs/$arch/*.so 112 rm -v ./android/SherpaOnnx2Pass/app/src/main/jniLibs/$arch/*.so
113 done 113 done
@@ -82,10 +82,10 @@ for arch in arm64-v8a armeabi-v7a x86_64 x86; do @@ -82,10 +82,10 @@ for arch in arm64-v8a armeabi-v7a x86_64 x86; do
82 pushd ./android/SherpaOnnx 82 pushd ./android/SherpaOnnx
83 sed -i.bak s/2048/9012/g ./gradle.properties 83 sed -i.bak s/2048/9012/g ./gradle.properties
84 git diff ./gradle.properties 84 git diff ./gradle.properties
85 - ./gradlew assembleRelease 85 + ./gradlew assembleRelease -Pandroid.injected.build.abi=$arch
86 popd 86 popd
87 87
88 - mv android/SherpaOnnx/app/build/outputs/apk/release/app-release-unsigned.apk ./apks/sherpa-onnx-${SHERPA_ONNX_VERSION}-$arch-asr-$lang-$short_name.apk 88 + mv android/SherpaOnnx/app/build/intermediates/apk/release/app-release-unsigned.apk ./apks/sherpa-onnx-${SHERPA_ONNX_VERSION}-$arch-asr-$lang-$short_name.apk
89 ls -lh apks 89 ls -lh apks
90 rm -v ./android/SherpaOnnx/app/src/main/jniLibs/$arch/*.so 90 rm -v ./android/SherpaOnnx/app/src/main/jniLibs/$arch/*.so
91 done 91 done
@@ -75,10 +75,10 @@ for arch in arm64-v8a armeabi-v7a x86_64 x86; do @@ -75,10 +75,10 @@ for arch in arm64-v8a armeabi-v7a x86_64 x86; do
75 pushd ./android/SherpaOnnxAudioTaggingWearOs 75 pushd ./android/SherpaOnnxAudioTaggingWearOs
76 sed -i.bak s/2048/9012/g ./gradle.properties 76 sed -i.bak s/2048/9012/g ./gradle.properties
77 git diff ./gradle.properties 77 git diff ./gradle.properties
78 - ./gradlew assembleRelease 78 + ./gradlew assembleRelease -Pandroid.injected.build.abi=$arch
79 popd 79 popd
80 80
81 - 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 81 + 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
82 ls -lh apks 82 ls -lh apks
83 rm -v ./android/SherpaOnnxAudioTaggingWearOs/app/src/main/jniLibs/$arch/*.so 83 rm -v ./android/SherpaOnnxAudioTaggingWearOs/app/src/main/jniLibs/$arch/*.so
84 done 84 done
@@ -74,10 +74,10 @@ for arch in arm64-v8a armeabi-v7a x86_64 x86; do @@ -74,10 +74,10 @@ for arch in arm64-v8a armeabi-v7a x86_64 x86; do
74 pushd ./android/SherpaOnnxAudioTagging 74 pushd ./android/SherpaOnnxAudioTagging
75 sed -i.bak s/2048/9012/g ./gradle.properties 75 sed -i.bak s/2048/9012/g ./gradle.properties
76 git diff ./gradle.properties 76 git diff ./gradle.properties
77 - ./gradlew assembleRelease 77 + ./gradlew assembleRelease -Pandroid.injected.build.abi=$arch
78 popd 78 popd
79 79
80 - mv android/SherpaOnnxAudioTagging/app/build/outputs/apk/release/app-release-unsigned.apk ./apks/sherpa-onnx-${SHERPA_ONNX_VERSION}-$arch-audio-tagging-$short_name.apk 80 + mv android/SherpaOnnxAudioTagging/app/build/intermediates/apk/release/app-release-unsigned.apk ./apks/sherpa-onnx-${SHERPA_ONNX_VERSION}-$arch-audio-tagging-$short_name.apk
81 ls -lh apks 81 ls -lh apks
82 rm -v ./android/SherpaOnnxAudioTagging/app/src/main/jniLibs/$arch/*.so 82 rm -v ./android/SherpaOnnxAudioTagging/app/src/main/jniLibs/$arch/*.so
83 done 83 done
@@ -77,10 +77,10 @@ for arch in arm64-v8a armeabi-v7a x86_64 x86; do @@ -77,10 +77,10 @@ for arch in arm64-v8a armeabi-v7a x86_64 x86; do
77 pushd ./android/SherpaOnnxKws 77 pushd ./android/SherpaOnnxKws
78 sed -i.bak s/2048/9012/g ./gradle.properties 78 sed -i.bak s/2048/9012/g ./gradle.properties
79 git diff ./gradle.properties 79 git diff ./gradle.properties
80 - ./gradlew assembleRelease 80 + ./gradlew assembleRelease -Pandroid.injected.build.abi=$arch
81 popd 81 popd
82 82
83 - mv android/SherpaOnnxKws/app/build/outputs/apk/release/app-release-unsigned.apk ./apks/sherpa-onnx-${SHERPA_ONNX_VERSION}-$arch-kws-zh-wenetspeech-zipformer.apk 83 + mv android/SherpaOnnxKws/app/build/intermediates/apk/release/app-release-unsigned.apk ./apks/sherpa-onnx-${SHERPA_ONNX_VERSION}-$arch-kws-zh-wenetspeech-zipformer.apk
84 84
85 ls -lh apks 85 ls -lh apks
86 rm -v ./android/SherpaOnnxKws/app/src/main/jniLibs/$arch/*.so 86 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 @@ -138,10 +138,10 @@ for arch in arm64-v8a armeabi-v7a x86_64 x86; do
138 pushd ./android/SherpaOnnxKws 138 pushd ./android/SherpaOnnxKws
139 sed -i.bak s/2048/9012/g ./gradle.properties 139 sed -i.bak s/2048/9012/g ./gradle.properties
140 git diff ./gradle.properties 140 git diff ./gradle.properties
141 - ./gradlew assembleRelease 141 + ./gradlew assembleRelease -Pandroid.injected.build.abi=$arch
142 popd 142 popd
143 143
144 - mv android/SherpaOnnxKws/app/build/outputs/apk/release/app-release-unsigned.apk ./apks/sherpa-onnx-${SHERPA_ONNX_VERSION}-$arch-kws-en-gigaspeech-zipformer.apk 144 + mv android/SherpaOnnxKws/app/build/intermediates/apk/release/app-release-unsigned.apk ./apks/sherpa-onnx-${SHERPA_ONNX_VERSION}-$arch-kws-en-gigaspeech-zipformer.apk
145 ls -lh apks 145 ls -lh apks
146 rm -v ./android/SherpaOnnxKws/app/src/main/jniLibs/$arch/*.so 146 rm -v ./android/SherpaOnnxKws/app/src/main/jniLibs/$arch/*.so
147 done 147 done
@@ -78,10 +78,10 @@ for arch in arm64-v8a armeabi-v7a x86_64 x86; do @@ -78,10 +78,10 @@ for arch in arm64-v8a armeabi-v7a x86_64 x86; do
78 pushd ./android/SherpaOnnxSpokenLanguageIdentification 78 pushd ./android/SherpaOnnxSpokenLanguageIdentification
79 sed -i.bak s/2048/9012/g ./gradle.properties 79 sed -i.bak s/2048/9012/g ./gradle.properties
80 git diff ./gradle.properties 80 git diff ./gradle.properties
81 - ./gradlew assembleRelease 81 + ./gradlew assembleRelease -Pandroid.injected.build.abi=$arch
82 popd 82 popd
83 83
84 - mv android/SherpaOnnxSpokenLanguageIdentification/app/build/outputs/apk/release/app-release-unsigned.apk ./apks/sherpa-onnx-${SHERPA_ONNX_VERSION}-$arch-slid-$short_name.apk 84 + mv android/SherpaOnnxSpokenLanguageIdentification/app/build/intermediates/apk/release/app-release-unsigned.apk ./apks/sherpa-onnx-${SHERPA_ONNX_VERSION}-$arch-slid-$short_name.apk
85 ls -lh apks 85 ls -lh apks
86 rm -v ./android/SherpaOnnxSpokenLanguageIdentification/app/src/main/jniLibs/$arch/*.so 86 rm -v ./android/SherpaOnnxSpokenLanguageIdentification/app/src/main/jniLibs/$arch/*.so
87 done 87 done
@@ -73,10 +73,10 @@ for arch in arm64-v8a armeabi-v7a x86_64 x86; do @@ -73,10 +73,10 @@ for arch in arm64-v8a armeabi-v7a x86_64 x86; do
73 cp -v ./build-android-$src_arch/install/lib/*.so ./android/SherpaOnnxSpeakerDiarization/app/src/main/jniLibs/$arch/ 73 cp -v ./build-android-$src_arch/install/lib/*.so ./android/SherpaOnnxSpeakerDiarization/app/src/main/jniLibs/$arch/
74 74
75 pushd ./android/SherpaOnnxSpeakerDiarization 75 pushd ./android/SherpaOnnxSpeakerDiarization
76 - ./gradlew build 76 + ./gradlew assembleRelease -Pandroid.injected.build.abi=$arch
77 popd 77 popd
78 78
79 - 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 79 + 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
80 ls -lh apks 80 ls -lh apks
81 rm -v ./android/SherpaOnnxSpeakerDiarization/app/src/main/jniLibs/$arch/*.so 81 rm -v ./android/SherpaOnnxSpeakerDiarization/app/src/main/jniLibs/$arch/*.so
82 done 82 done
@@ -69,10 +69,10 @@ for arch in arm64-v8a armeabi-v7a x86_64 x86; do @@ -69,10 +69,10 @@ for arch in arm64-v8a armeabi-v7a x86_64 x86; do
69 pushd ./android/SherpaOnnxSpeakerIdentification 69 pushd ./android/SherpaOnnxSpeakerIdentification
70 sed -i.bak s/2048/9012/g ./gradle.properties 70 sed -i.bak s/2048/9012/g ./gradle.properties
71 git diff ./gradle.properties 71 git diff ./gradle.properties
72 - ./gradlew build 72 + ./gradlew assembleRelease -Pandroid.injected.build.abi=$arch
73 popd 73 popd
74 74
75 - 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 75 + 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
76 ls -lh apks 76 ls -lh apks
77 rm -v ./android/SherpaOnnxSpeakerIdentification/app/src/main/jniLibs/$arch/*.so 77 rm -v ./android/SherpaOnnxSpeakerIdentification/app/src/main/jniLibs/$arch/*.so
78 done 78 done
@@ -141,10 +141,10 @@ for arch in arm64-v8a armeabi-v7a x86_64 x86; do @@ -141,10 +141,10 @@ for arch in arm64-v8a armeabi-v7a x86_64 x86; do
141 pushd ./android/SherpaOnnxTtsEngine 141 pushd ./android/SherpaOnnxTtsEngine
142 sed -i.bak s/2048/9012/g ./gradle.properties 142 sed -i.bak s/2048/9012/g ./gradle.properties
143 git diff ./gradle.properties 143 git diff ./gradle.properties
144 - ./gradlew assembleRelease 144 + ./gradlew assembleRelease -Pandroid.injected.build.abi=$arch
145 popd 145 popd
146 146
147 - 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 147 + 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
148 ls -lh apks 148 ls -lh apks
149 rm -v ./android/SherpaOnnxTtsEngine/app/src/main/jniLibs/$arch/*.so 149 rm -v ./android/SherpaOnnxTtsEngine/app/src/main/jniLibs/$arch/*.so
150 done 150 done
@@ -134,10 +134,10 @@ for arch in arm64-v8a armeabi-v7a x86_64 x86; do @@ -134,10 +134,10 @@ for arch in arm64-v8a armeabi-v7a x86_64 x86; do
134 pushd ./android/SherpaOnnxTts 134 pushd ./android/SherpaOnnxTts
135 sed -i.bak s/2048/9012/g ./gradle.properties 135 sed -i.bak s/2048/9012/g ./gradle.properties
136 git diff ./gradle.properties 136 git diff ./gradle.properties
137 - ./gradlew assembleRelease 137 + ./gradlew assembleRelease -Pandroid.injected.build.abi=$arch
138 popd 138 popd
139 139
140 - mv android/SherpaOnnxTts/app/build/outputs/apk/release/app-release-unsigned.apk ./apks/sherpa-onnx-${SHERPA_ONNX_VERSION}-$arch-$lang-tts-$model_dir.apk 140 + mv android/SherpaOnnxTts/app/build/intermediates/apk/release/app-release-unsigned.apk ./apks/sherpa-onnx-${SHERPA_ONNX_VERSION}-$arch-$lang-tts-$model_dir.apk
141 ls -lh apks 141 ls -lh apks
142 rm -v ./android/SherpaOnnxTts/app/src/main/jniLibs/$arch/*.so 142 rm -v ./android/SherpaOnnxTts/app/src/main/jniLibs/$arch/*.so
143 done 143 done
@@ -103,10 +103,11 @@ for arch in arm64-v8a armeabi-v7a x86_64 x86; do @@ -103,10 +103,11 @@ for arch in arm64-v8a armeabi-v7a x86_64 x86; do
103 pushd ./android/SherpaOnnxSimulateStreamingAsr 103 pushd ./android/SherpaOnnxSimulateStreamingAsr
104 sed -i.bak s/2048/9012/g ./gradle.properties 104 sed -i.bak s/2048/9012/g ./gradle.properties
105 git diff ./gradle.properties 105 git diff ./gradle.properties
106 - ./gradlew assembleRelease 106 + ./gradlew assembleRelease -Pandroid.injected.build.abi=$arch
107 popd 107 popd
108 108
109 - 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 109 + find . -name "*.apk"
  110 + 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
110 ls -lh apks 111 ls -lh apks
111 rm -v ./android/SherpaOnnxSimulateStreamingAsr/app/src/main/jniLibs/$arch/*.so 112 rm -v ./android/SherpaOnnxSimulateStreamingAsr/app/src/main/jniLibs/$arch/*.so
112 done 113 done
@@ -83,10 +83,10 @@ for arch in arm64-v8a armeabi-v7a x86_64 x86; do @@ -83,10 +83,10 @@ for arch in arm64-v8a armeabi-v7a x86_64 x86; do
83 pushd ./android/SherpaOnnxVadAsr 83 pushd ./android/SherpaOnnxVadAsr
84 sed -i.bak s/2048/9012/g ./gradle.properties 84 sed -i.bak s/2048/9012/g ./gradle.properties
85 git diff ./gradle.properties 85 git diff ./gradle.properties
86 - ./gradlew assembleRelease 86 + ./gradlew assembleRelease -Pandroid.injected.build.abi=$arch
87 popd 87 popd
88 88
89 - 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 89 + 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
90 ls -lh apks 90 ls -lh apks
91 rm -v ./android/SherpaOnnxVadAsr/app/src/main/jniLibs/$arch/*.so 91 rm -v ./android/SherpaOnnxVadAsr/app/src/main/jniLibs/$arch/*.so
92 done 92 done
@@ -58,10 +58,10 @@ for arch in arm64-v8a armeabi-v7a x86_64 x86; do @@ -58,10 +58,10 @@ for arch in arm64-v8a armeabi-v7a x86_64 x86; do
58 pushd ./android/SherpaOnnxVad 58 pushd ./android/SherpaOnnxVad
59 sed -i.bak s/2048/9012/g ./gradle.properties 59 sed -i.bak s/2048/9012/g ./gradle.properties
60 git diff ./gradle.properties 60 git diff ./gradle.properties
61 - ./gradlew assembleRelease 61 + ./gradlew assembleRelease -Pandroid.injected.build.abi=$arch
62 popd 62 popd
63 63
64 - mv android/SherpaOnnxVad/app/build/outputs/apk/release/app-release-unsigned.apk ./apks/sherpa-onnx-${SHERPA_ONNX_VERSION}-$arch-silero_vad.apk 64 + mv android/SherpaOnnxVad/app/build/intermediates/apk/release/app-release-unsigned.apk ./apks/sherpa-onnx-${SHERPA_ONNX_VERSION}-$arch-silero_vad.apk
65 ls -lh apks 65 ls -lh apks
66 rm -v ./android/SherpaOnnxVad/app/src/main/jniLibs/$arch/*.so 66 rm -v ./android/SherpaOnnxVad/app/src/main/jniLibs/$arch/*.so
67 done 67 done
@@ -101,10 +101,10 @@ for arch in arm64-v8a armeabi-v7a x86_64 x86; do @@ -101,10 +101,10 @@ for arch in arm64-v8a armeabi-v7a x86_64 x86; do
101 pushd ./android/SherpaOnnxVad 101 pushd ./android/SherpaOnnxVad
102 sed -i.bak s/2048/9012/g ./gradle.properties 102 sed -i.bak s/2048/9012/g ./gradle.properties
103 git diff ./gradle.properties 103 git diff ./gradle.properties
104 - ./gradlew assembleRelease 104 + ./gradlew assembleRelease -Pandroid.injected.build.abi=$arch
105 popd 105 popd
106 106
107 - mv android/SherpaOnnxVad/app/build/outputs/apk/release/app-release-unsigned.apk ./apks/sherpa-onnx-${SHERPA_ONNX_VERSION}-$arch-ten_vad.apk 107 + mv android/SherpaOnnxVad/app/build/intermediates/apk/release/app-release-unsigned.apk ./apks/sherpa-onnx-${SHERPA_ONNX_VERSION}-$arch-ten_vad.apk
108 ls -lh apks 108 ls -lh apks
109 rm -v ./android/SherpaOnnxVad/app/src/main/jniLibs/$arch/*.so 109 rm -v ./android/SherpaOnnxVad/app/src/main/jniLibs/$arch/*.so
110 done 110 done
@@ -55,7 +55,7 @@ OfflineFireRedAsrGreedySearchDecoder::Decode(Ort::Value cross_k, @@ -55,7 +55,7 @@ OfflineFireRedAsrGreedySearchDecoder::Decode(Ort::Value cross_k,
55 std::move(offset)}; 55 std::move(offset)};
56 56
57 // assume at most 6 tokens per second 57 // assume at most 6 tokens per second
58 - int32_t num_possible_tokens = num_feature_frames / 100 * 6; 58 + int32_t num_possible_tokens = num_feature_frames / 100.0 * 6;
59 num_possible_tokens = 59 num_possible_tokens =
60 std::min<int32_t>(num_possible_tokens, meta_data.max_len / 2); 60 std::min<int32_t>(num_possible_tokens, meta_data.max_len / 2);
61 61
@@ -102,7 +102,7 @@ OfflineWhisperGreedySearchDecoder::Decode(Ort::Value cross_k, @@ -102,7 +102,7 @@ OfflineWhisperGreedySearchDecoder::Decode(Ort::Value cross_k,
102 std::vector<int32_t> predicted_tokens; 102 std::vector<int32_t> predicted_tokens;
103 103
104 // assume at most 6 tokens per second 104 // assume at most 6 tokens per second
105 - int32_t num_possible_tokens = num_feature_frames / 100 * 6; 105 + int32_t num_possible_tokens = num_feature_frames / 100.0 * 6;
106 num_possible_tokens = std::min<int32_t>(num_possible_tokens, n_text_ctx / 2); 106 num_possible_tokens = std::min<int32_t>(num_possible_tokens, n_text_ctx / 2);
107 107
108 for (int32_t i = 0; i < num_possible_tokens; ++i) { 108 for (int32_t i = 0; i < num_possible_tokens; ++i) {