react-native-audio-api 0.8.0-nightly-daaceff-20250902 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/android/build.gradle +1 -1
  2. package/android/src/main/cpp/audioapi/CMakeLists.txt +3 -12
  3. package/android/src/main/cpp/audioapi/android/core/AudioDecoder.cpp +51 -21
  4. package/android/src/main/jniLibs/arm64-v8a/libavcodec.so +0 -0
  5. package/android/src/main/jniLibs/arm64-v8a/libavformat.so +0 -0
  6. package/android/src/main/jniLibs/arm64-v8a/libavutil.so +0 -0
  7. package/android/src/main/jniLibs/arm64-v8a/libswresample.so +0 -0
  8. package/android/src/main/jniLibs/armeabi-v7a/libavcodec.so +0 -0
  9. package/android/src/main/jniLibs/armeabi-v7a/libavformat.so +0 -0
  10. package/android/src/main/jniLibs/armeabi-v7a/libavutil.so +0 -0
  11. package/android/src/main/jniLibs/armeabi-v7a/libswresample.so +0 -0
  12. package/android/src/main/jniLibs/x86/libavcodec.so +0 -0
  13. package/android/src/main/jniLibs/x86/libavformat.so +0 -0
  14. package/android/src/main/jniLibs/x86/libavutil.so +0 -0
  15. package/android/src/main/jniLibs/x86/libswresample.so +0 -0
  16. package/android/src/main/jniLibs/x86_64/libavcodec.so +0 -0
  17. package/android/src/main/jniLibs/x86_64/libavformat.so +0 -0
  18. package/android/src/main/jniLibs/x86_64/libavutil.so +0 -0
  19. package/android/src/main/jniLibs/x86_64/libswresample.so +0 -0
  20. package/common/cpp/audioapi/core/utils/AudioDecoder.h +61 -0
  21. package/common/cpp/audioapi/core/utils/AudioNodeManager.cpp +14 -2
  22. package/common/cpp/audioapi/core/utils/AudioNodeManager.h +3 -0
  23. package/common/cpp/audioapi/external/libavcodec.xcframework/Info.plist +5 -5
  24. package/common/cpp/audioapi/external/libavcodec.xcframework/ios-arm64/libavcodec.framework/libavcodec +0 -0
  25. package/common/cpp/audioapi/external/libavcodec.xcframework/ios-arm64_x86_64-simulator/libavcodec.framework/libavcodec +0 -0
  26. package/common/cpp/audioapi/external/libavformat.xcframework/Info.plist +5 -5
  27. package/common/cpp/audioapi/external/libavformat.xcframework/ios-arm64/libavformat.framework/libavformat +0 -0
  28. package/common/cpp/audioapi/external/libavformat.xcframework/ios-arm64_x86_64-simulator/libavformat.framework/libavformat +0 -0
  29. package/common/cpp/audioapi/external/libavutil.xcframework/Info.plist +5 -5
  30. package/common/cpp/audioapi/external/libavutil.xcframework/ios-arm64/libavutil.framework/libavutil +0 -0
  31. package/common/cpp/audioapi/external/libavutil.xcframework/ios-arm64_x86_64-simulator/libavutil.framework/libavutil +0 -0
  32. package/common/cpp/audioapi/external/libswresample.xcframework/ios-arm64/libswresample.framework/libswresample +0 -0
  33. package/common/cpp/audioapi/external/libswresample.xcframework/ios-arm64_x86_64-simulator/libswresample.framework/libswresample +0 -0
  34. package/common/cpp/audioapi/libs/ffmpeg/FFmpegDecoding.cpp +402 -0
  35. package/common/cpp/audioapi/libs/ffmpeg/FFmpegDecoding.h +27 -0
  36. package/common/cpp/audioapi/libs/ffmpeg/ffmpeg_setup.sh +11 -10
  37. package/common/cpp/audioapi/utils/SpscChannel.hpp +47 -38
  38. package/common/cpp/test/CMakeLists.txt +2 -0
  39. package/ios/audioapi/ios/core/AudioDecoder.mm +22 -2
  40. package/lib/commonjs/core/AudioContext.js.map +1 -1
  41. package/lib/module/core/AudioContext.js.map +1 -1
  42. package/lib/typescript/core/AudioContext.d.ts +1 -1
  43. package/lib/typescript/core/AudioContext.d.ts.map +1 -1
  44. package/lib/typescript/interfaces.d.ts +1 -1
  45. package/lib/typescript/interfaces.d.ts.map +1 -1
  46. package/package.json +1 -1
  47. package/src/core/AudioContext.ts +1 -1
  48. package/src/interfaces.ts +1 -1
  49. package/common/cpp/audioapi/external/libavcodec.xcframework/ios-arm64_x86_64-simulator/libavcodec.framework/libavcodec.framework/Info.plist +0 -1
  50. package/common/cpp/audioapi/external/libavcodec.xcframework/ios-arm64_x86_64-simulator/libavcodec.framework/libavcodec.framework/libavcodec +0 -0
@@ -0,0 +1,402 @@
1
+ #include "FFmpegDecoding.h"
2
+
3
+ namespace audioapi::ffmpegdecoding {
4
+
5
+ int read_packet(void *opaque, uint8_t *buf, int buf_size) {
6
+ MemoryIOContext *ctx = static_cast<MemoryIOContext *>(opaque);
7
+
8
+ if (ctx->pos >= ctx->size) {
9
+ return AVERROR_EOF;
10
+ }
11
+
12
+ int bytes_to_read =
13
+ std::min(buf_size, static_cast<int>(ctx->size - ctx->pos));
14
+ memcpy(buf, ctx->data + ctx->pos, bytes_to_read);
15
+ ctx->pos += bytes_to_read;
16
+
17
+ return bytes_to_read;
18
+ }
19
+
20
+ int64_t seek_packet(void *opaque, int64_t offset, int whence) {
21
+ MemoryIOContext *ctx = static_cast<MemoryIOContext *>(opaque);
22
+
23
+ switch (whence) {
24
+ case SEEK_SET:
25
+ ctx->pos = offset;
26
+ break;
27
+ case SEEK_CUR:
28
+ ctx->pos += offset;
29
+ break;
30
+ case SEEK_END:
31
+ ctx->pos = ctx->size + offset;
32
+ break;
33
+ case AVSEEK_SIZE:
34
+ return ctx->size;
35
+ }
36
+
37
+ if (ctx->pos > ctx->size) {
38
+ ctx->pos = ctx->size;
39
+ }
40
+
41
+ return ctx->pos;
42
+ }
43
+
44
+ std::vector<int16_t> readAllPcmFrames(
45
+ AVFormatContext *fmt_ctx,
46
+ AVCodecContext *codec_ctx,
47
+ int out_sample_rate,
48
+ int audio_stream_index,
49
+ int channels,
50
+ size_t &framesRead) {
51
+ std::vector<int16_t> buffer;
52
+ SwrContext *swr_ctx = swr_alloc();
53
+ if (swr_ctx == nullptr) {
54
+ return buffer;
55
+ }
56
+
57
+ av_opt_set_chlayout(swr_ctx, "in_chlayout", &codec_ctx->ch_layout, 0);
58
+ av_opt_set_int(swr_ctx, "in_sample_rate", codec_ctx->sample_rate, 0);
59
+ av_opt_set_sample_fmt(swr_ctx, "in_sample_fmt", codec_ctx->sample_fmt, 0);
60
+
61
+ AVChannelLayout out_ch_layout;
62
+ av_channel_layout_default(&out_ch_layout, channels);
63
+ av_opt_set_chlayout(swr_ctx, "out_chlayout", &out_ch_layout, 0);
64
+ av_opt_set_int(swr_ctx, "out_sample_rate", out_sample_rate, 0);
65
+ av_opt_set_sample_fmt(swr_ctx, "out_sample_fmt", AV_SAMPLE_FMT_S16, 0);
66
+
67
+ if (swr_init(swr_ctx) < 0) {
68
+ swr_free(&swr_ctx);
69
+ av_channel_layout_uninit(&out_ch_layout);
70
+ return buffer;
71
+ }
72
+
73
+ AVPacket *packet = av_packet_alloc();
74
+ AVFrame *frame = av_frame_alloc();
75
+
76
+ if (packet == nullptr || frame == nullptr) {
77
+ if (packet != nullptr) av_packet_free(&packet);
78
+ if (frame != nullptr) av_frame_free(&frame);
79
+ swr_free(&swr_ctx);
80
+ av_channel_layout_uninit(&out_ch_layout);
81
+ return buffer;
82
+ }
83
+
84
+ // Allocate buffer for resampled data
85
+ uint8_t **resampled_data = nullptr;
86
+ int max_resampled_samples = 4096; // Initial size
87
+ int ret = av_samples_alloc_array_and_samples(
88
+ &resampled_data,
89
+ nullptr,
90
+ channels,
91
+ max_resampled_samples,
92
+ AV_SAMPLE_FMT_S16,
93
+ 0);
94
+
95
+ if (ret < 0) {
96
+ av_frame_free(&frame);
97
+ av_packet_free(&packet);
98
+ swr_free(&swr_ctx);
99
+ av_channel_layout_uninit(&out_ch_layout);
100
+ return buffer;
101
+ }
102
+
103
+ framesRead = 0;
104
+
105
+ while (av_read_frame(fmt_ctx, packet) >= 0) {
106
+ if (packet->stream_index == audio_stream_index) {
107
+ if (avcodec_send_packet(codec_ctx, packet) == 0) {
108
+ while (avcodec_receive_frame(codec_ctx, frame) == 0) {
109
+ // Check if we need more buffer space
110
+ int out_samples = swr_get_out_samples(swr_ctx, frame->nb_samples);
111
+ if (out_samples > max_resampled_samples) {
112
+ if (resampled_data != nullptr) {
113
+ av_freep(&resampled_data[0]);
114
+ av_freep(&resampled_data);
115
+ }
116
+
117
+ max_resampled_samples = out_samples;
118
+ ret = av_samples_alloc_array_and_samples(
119
+ &resampled_data,
120
+ nullptr,
121
+ channels,
122
+ max_resampled_samples,
123
+ AV_SAMPLE_FMT_S16,
124
+ 0);
125
+
126
+ if (ret < 0) {
127
+ break; // Exit on allocation failure
128
+ }
129
+ }
130
+
131
+ int converted_samples = swr_convert(
132
+ swr_ctx,
133
+ resampled_data,
134
+ max_resampled_samples,
135
+ (const uint8_t **)frame->data,
136
+ frame->nb_samples);
137
+
138
+ if (converted_samples > 0) {
139
+ size_t current_size = buffer.size();
140
+ size_t new_samples = converted_samples * channels;
141
+ buffer.resize(current_size + new_samples);
142
+ memcpy(
143
+ buffer.data() + current_size,
144
+ resampled_data[0],
145
+ new_samples * sizeof(int16_t));
146
+
147
+ framesRead += converted_samples;
148
+ }
149
+ }
150
+ }
151
+ }
152
+ av_packet_unref(packet);
153
+ }
154
+
155
+ // Flush decoder
156
+ avcodec_send_packet(codec_ctx, nullptr);
157
+ while (avcodec_receive_frame(codec_ctx, frame) == 0) {
158
+ int out_samples = swr_get_out_samples(swr_ctx, frame->nb_samples);
159
+ if (out_samples > max_resampled_samples) {
160
+ if (resampled_data != nullptr) {
161
+ av_freep(&resampled_data[0]);
162
+ av_freep(&resampled_data);
163
+ }
164
+
165
+ max_resampled_samples = out_samples;
166
+ ret = av_samples_alloc_array_and_samples(
167
+ &resampled_data,
168
+ nullptr,
169
+ channels,
170
+ max_resampled_samples,
171
+ AV_SAMPLE_FMT_S16,
172
+ 0);
173
+
174
+ if (ret < 0) {
175
+ break;
176
+ }
177
+ }
178
+
179
+ int converted_samples = swr_convert(
180
+ swr_ctx,
181
+ resampled_data,
182
+ max_resampled_samples,
183
+ (const uint8_t **)frame->data,
184
+ frame->nb_samples);
185
+
186
+ if (converted_samples > 0) {
187
+ size_t current_size = buffer.size();
188
+ size_t new_samples = converted_samples * channels;
189
+ buffer.resize(current_size + new_samples);
190
+ memcpy(
191
+ buffer.data() + current_size,
192
+ resampled_data[0],
193
+ new_samples * sizeof(int16_t));
194
+
195
+ framesRead += converted_samples;
196
+ }
197
+ }
198
+
199
+ if (resampled_data != nullptr) {
200
+ av_freep(&resampled_data[0]);
201
+ av_freep(&resampled_data);
202
+ }
203
+ swr_free(&swr_ctx);
204
+ av_channel_layout_uninit(&out_ch_layout);
205
+ av_frame_free(&frame);
206
+ av_packet_free(&packet);
207
+
208
+ return buffer;
209
+ }
210
+
211
+ std::vector<int16_t> decodeWithMemoryBlock(const void *data, size_t size, int sample_rate) {
212
+ if (data == nullptr || size == 0) {
213
+ return {};
214
+ }
215
+
216
+ MemoryIOContext io_ctx;
217
+ io_ctx.data = static_cast<const uint8_t *>(data);
218
+ io_ctx.size = size;
219
+ io_ctx.pos = 0;
220
+
221
+ constexpr size_t buffer_size = 4096;
222
+ uint8_t *io_buffer = static_cast<uint8_t *>(av_malloc(buffer_size));
223
+ if (io_buffer == nullptr) {
224
+ return {};
225
+ }
226
+
227
+ AVIOContext *avio_ctx = avio_alloc_context(
228
+ io_buffer, buffer_size, 0, &io_ctx, read_packet, nullptr, seek_packet);
229
+
230
+ if (avio_ctx == nullptr) {
231
+ av_free(io_buffer);
232
+ return {};
233
+ }
234
+
235
+ // Create format context and set custom IO
236
+ AVFormatContext *fmt_ctx = avformat_alloc_context();
237
+ if (fmt_ctx == nullptr) {
238
+ avio_context_free(&avio_ctx);
239
+ return {};
240
+ }
241
+
242
+ fmt_ctx->pb = avio_ctx;
243
+
244
+ // Open input from memory
245
+ if (avformat_open_input(&fmt_ctx, nullptr, nullptr, nullptr) < 0) {
246
+ avformat_free_context(fmt_ctx);
247
+ avio_context_free(&avio_ctx);
248
+ return {};
249
+ }
250
+
251
+ // Find stream info
252
+ if (avformat_find_stream_info(fmt_ctx, nullptr) < 0) {
253
+ avformat_close_input(&fmt_ctx);
254
+ avio_context_free(&avio_ctx);
255
+ return {};
256
+ }
257
+
258
+ int audio_stream_index = -1;
259
+ for (int i = 0; i < fmt_ctx->nb_streams; i++) {
260
+ if (fmt_ctx->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_AUDIO) {
261
+ audio_stream_index = i;
262
+ break;
263
+ }
264
+ }
265
+
266
+ if (audio_stream_index == -1) {
267
+ avformat_close_input(&fmt_ctx);
268
+ avio_context_free(&avio_ctx);
269
+ return {};
270
+ }
271
+
272
+ AVCodecParameters *codecpar = fmt_ctx->streams[audio_stream_index]->codecpar;
273
+
274
+ // Find decoder
275
+ const AVCodec *codec = avcodec_find_decoder(codecpar->codec_id);
276
+ if (codec == nullptr) {
277
+ avformat_close_input(&fmt_ctx);
278
+ avio_context_free(&avio_ctx);
279
+ return {};
280
+ }
281
+
282
+ // Allocate and setup codec context
283
+ AVCodecContext *codec_ctx = avcodec_alloc_context3(codec);
284
+ if (codec_ctx == nullptr) {
285
+ avformat_close_input(&fmt_ctx);
286
+ avio_context_free(&avio_ctx);
287
+ return {};
288
+ }
289
+
290
+ if (avcodec_parameters_to_context(codec_ctx, codecpar) < 0) {
291
+ avcodec_free_context(&codec_ctx);
292
+ avformat_close_input(&fmt_ctx);
293
+ avio_context_free(&avio_ctx);
294
+ return {};
295
+ }
296
+
297
+ if (avcodec_open2(codec_ctx, codec, nullptr) < 0) {
298
+ avcodec_free_context(&codec_ctx);
299
+ avformat_close_input(&fmt_ctx);
300
+ avio_context_free(&avio_ctx);
301
+ return {};
302
+ }
303
+
304
+ // Get actual channel count from the decoded stream
305
+ int actual_channels = codec_ctx->ch_layout.nb_channels;
306
+
307
+ // Validate channel count
308
+ if (actual_channels <= 0 || actual_channels > 8) {
309
+ avcodec_free_context(&codec_ctx);
310
+ avformat_close_input(&fmt_ctx);
311
+ avio_context_free(&avio_ctx);
312
+ return {};
313
+ }
314
+
315
+ // Decode all frames
316
+ size_t framesRead = 0;
317
+ std::vector<int16_t> decoded_buffer = readAllPcmFrames(
318
+ fmt_ctx, codec_ctx, sample_rate, audio_stream_index, actual_channels, framesRead);
319
+
320
+ // Cleanup - Note: avio_context_free will free the io_buffer
321
+ avcodec_free_context(&codec_ctx);
322
+ avformat_close_input(&fmt_ctx);
323
+ avio_context_free(&avio_ctx);
324
+
325
+ if (framesRead == 0 || decoded_buffer.empty()) {
326
+ return {};
327
+ }
328
+
329
+ return decoded_buffer;
330
+ }
331
+
332
+ std::vector<int16_t> decodeWithFilePath(const std::string &path, int sample_rate) {
333
+ if (path.empty()) {
334
+ return {};
335
+ }
336
+
337
+ AVFormatContext *fmt_ctx = nullptr;
338
+ if (avformat_open_input(&fmt_ctx, path.c_str(), nullptr, nullptr) < 0) {
339
+ return {};
340
+ }
341
+ if (avformat_find_stream_info(fmt_ctx, nullptr) < 0) {
342
+ avformat_close_input(&fmt_ctx);
343
+ return {};
344
+ }
345
+ int audio_stream_index = -1;
346
+ for (int i = 0; i < fmt_ctx->nb_streams; i++) {
347
+ if (fmt_ctx->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_AUDIO) {
348
+ audio_stream_index = i;
349
+ break;
350
+ }
351
+ }
352
+ if (audio_stream_index == -1) {
353
+ avformat_close_input(&fmt_ctx);
354
+ return {};
355
+ }
356
+
357
+ AVCodecParameters *codecpar = fmt_ctx->streams[audio_stream_index]->codecpar;
358
+ const AVCodec *codec = avcodec_find_decoder(codecpar->codec_id);
359
+ if (codec == nullptr) {
360
+ avformat_close_input(&fmt_ctx);
361
+ return {};
362
+ }
363
+ AVCodecContext *codec_ctx = avcodec_alloc_context3(codec);
364
+ if (codec_ctx == nullptr) {
365
+ avformat_close_input(&fmt_ctx);
366
+ return {};
367
+ }
368
+
369
+ if (avcodec_parameters_to_context(codec_ctx, codecpar) < 0) {
370
+ avcodec_free_context(&codec_ctx);
371
+ avformat_close_input(&fmt_ctx);
372
+ return {};
373
+ }
374
+
375
+ if (avcodec_open2(codec_ctx, codec, nullptr) < 0) {
376
+ avcodec_free_context(&codec_ctx);
377
+ avformat_close_input(&fmt_ctx);
378
+ return {};
379
+ }
380
+
381
+ int actual_channels = codec_ctx->ch_layout.nb_channels;
382
+ if (actual_channels <= 0 || actual_channels > 8) {
383
+ avcodec_free_context(&codec_ctx);
384
+ avformat_close_input(&fmt_ctx);
385
+ return {};
386
+ }
387
+
388
+ size_t framesRead = 0;
389
+ std::vector<int16_t> decoded_buffer = readAllPcmFrames(
390
+ fmt_ctx, codec_ctx, sample_rate, audio_stream_index, actual_channels, framesRead);
391
+
392
+ avcodec_free_context(&codec_ctx);
393
+ avformat_close_input(&fmt_ctx);
394
+
395
+ if (framesRead == 0 || decoded_buffer.empty()) {
396
+ return {};
397
+ }
398
+
399
+ return decoded_buffer;
400
+ }
401
+
402
+ } // namespace audioapi::ffmpegdecoder
@@ -0,0 +1,27 @@
1
+ #include <audioapi/utils/AudioBus.h>
2
+ #include <iostream>
3
+ #include <memory>
4
+ #include <vector>
5
+
6
+ extern "C" {
7
+ #include <libavcodec/avcodec.h>
8
+ #include <libavformat/avformat.h>
9
+ #include <libavutil/opt.h>
10
+ #include <libswresample/swresample.h>
11
+ }
12
+
13
+ namespace audioapi::ffmpegdecoding {
14
+ // Custom IO context for reading from memory
15
+ struct MemoryIOContext {
16
+ const uint8_t *data;
17
+ size_t size;
18
+ size_t pos;
19
+ };
20
+
21
+ int read_packet(void *opaque, uint8_t *buf, int buf_size);
22
+ int64_t seek_packet(void *opaque, int64_t offset, int whence);
23
+ std::vector<int16_t> readAllPcmFrames(AVFormatContext *fmt_ctx, AVCodecContext *codec_ctx, int out_sample_rate, int audio_stream_index, int channels, size_t &framesRead);
24
+ std::vector<int16_t> decodeWithMemoryBlock(const void *data, size_t size, int sample_rate);
25
+ std::vector<int16_t> decodeWithFilePath(const std::string &path, int sample_rate);
26
+
27
+ } // namespace audioapi::ffmpegdecoder
@@ -51,6 +51,7 @@ COMMON_CONFIG="
51
51
  --enable-decoder=mp3
52
52
  --enable-decoder=flac
53
53
  --enable-protocol=udp
54
+ --enable-protocol=file
54
55
  --enable-pic
55
56
  --disable-x86asm
56
57
  "
@@ -310,28 +311,28 @@ if [ -n "$ANDROID_NDK_ROOT" ] || [ -n "$NDK_ROOT" ]; then
310
311
  build_arch "aarch64" "android" \
311
312
  "${TOOLCHAIN}/bin/aarch64-linux-android${API_LEVEL}-clang" \
312
313
  "${TOOLCHAIN}/bin/aarch64-linux-android${API_LEVEL}-clang++" \
313
- "-I${OPENSSL_PREBUILT_FOLDER}/include -I${TOOLCHAIN}/sysroot/usr/include -fPIC -Wl,-Bsymbolic" \
314
- "-L${OPENSSL_PREBUILT_FOLDER}/arm64-v8a -L${TOOLCHAIN}/sysroot/usr/lib/aarch64-linux-android/${API_LEVEL} -fPIC -Wl,-Bsymbolic" \
314
+ "-I${OPENSSL_PREBUILT_FOLDER}/include -I${TOOLCHAIN}/sysroot/usr/include -fPIC -Wl,-Bsymbolic -Wl,-z,max-page-size=16384 -Wl,-z,common-page-size=16384" \
315
+ "-L${OPENSSL_PREBUILT_FOLDER}/arm64-v8a -L${TOOLCHAIN}/sysroot/usr/lib/aarch64-linux-android/${API_LEVEL} -fPIC -Wl,-Bsymbolic -Wl,-z,max-page-size=16384 -Wl,-z,common-page-size=16384" \
315
316
  "--enable-openssl --extra-libs=-lz"
316
317
 
317
- rm -rf ${OUTPUT_DIR}/android/aarch64/share
318
+ rm -rf ${OUTPUT_DIR}/android/arm64-v8a/share
318
319
 
319
320
  # ARMv7a
320
321
  build_arch "armv7a" "android" \
321
322
  "${TOOLCHAIN}/bin/armv7a-linux-androideabi${API_LEVEL}-clang" \
322
323
  "${TOOLCHAIN}/bin/armv7a-linux-androideabi${API_LEVEL}-clang++" \
323
- "-I${OPENSSL_PREBUILT_FOLDER}/include -I${TOOLCHAIN}/sysroot/usr/include -fPIC -Wl,-Bsymbolic" \
324
- "-L${OPENSSL_PREBUILT_FOLDER}/armeabi-v7a -L${TOOLCHAIN}/sysroot/usr/lib/arm-linux-android/${API_LEVEL} -fPIC -Wl,-Bsymbolic" \
324
+ "-I${OPENSSL_PREBUILT_FOLDER}/include -I${TOOLCHAIN}/sysroot/usr/include -fPIC -Wl,-Bsymbolic -Wl,-z,max-page-size=16384 -Wl,-z,common-page-size=16384" \
325
+ "-L${OPENSSL_PREBUILT_FOLDER}/armeabi-v7a -L${TOOLCHAIN}/sysroot/usr/lib/arm-linux-android/${API_LEVEL} -fPIC -Wl,-Bsymbolic -Wl,-z,max-page-size=16384 -Wl,-z,common-page-size=16384" \
325
326
  "--enable-openssl --extra-libs=-lz"
326
327
 
327
- rm -rf ${OUTPUT_DIR}/android/armv7a/share
328
+ rm -rf ${OUTPUT_DIR}/android/armeabi-v7a/share
328
329
 
329
330
  # x86
330
331
  build_arch "x86" "android" \
331
332
  "${TOOLCHAIN}/bin/i686-linux-android${API_LEVEL}-clang" \
332
333
  "${TOOLCHAIN}/bin/i686-linux-android${API_LEVEL}-clang++" \
333
- "-I${OPENSSL_PREBUILT_FOLDER}/include -I${TOOLCHAIN}/darwin-x86_64/sysroot/usr/include -fPIC -Wl,-Bsymbolic" \
334
- "-L${OPENSSL_PREBUILT_FOLDER}/x86 -L${TOOLCHAIN}/darwin-x86_64/sysroot/usr/lib/i686-linux-android/${API_LEVEL} -fPIC -Wl,-Bsymbolic" \
334
+ "-I${OPENSSL_PREBUILT_FOLDER}/include -I${TOOLCHAIN}/darwin-x86_64/sysroot/usr/include -fPIC -Wl,-Bsymbolic -Wl,-z,max-page-size=16384 -Wl,-z,common-page-size=16384" \
335
+ "-L${OPENSSL_PREBUILT_FOLDER}/x86 -L${TOOLCHAIN}/darwin-x86_64/sysroot/usr/lib/i686-linux-android/${API_LEVEL} -fPIC -Wl,-Bsymbolic -Wl,-z,max-page-size=16384 -Wl,-z,common-page-size=16384" \
335
336
  "--enable-openssl --extra-libs=-lz"
336
337
 
337
338
  rm -rf ${OUTPUT_DIR}/android/x86/share
@@ -341,8 +342,8 @@ if [ -n "$ANDROID_NDK_ROOT" ] || [ -n "$NDK_ROOT" ]; then
341
342
  build_arch "x86_64" "android" \
342
343
  "${TOOLCHAIN}/bin/x86_64-linux-android${API_LEVEL}-clang" \
343
344
  "${TOOLCHAIN}/bin/x86_64-linux-android${API_LEVEL}-clang++" \
344
- "-I${OPENSSL_PREBUILT_FOLDER}/include -I${TOOLCHAIN}/darwin-x86_64/sysroot/usr/include -fPIC -Wl,-Bsymbolic" \
345
- "-L${OPENSSL_PREBUILT_FOLDER}/x86_64 -L${TOOLCHAIN}/darwin-x86_64/sysroot/usr/lib/x86_64-linux-android/${API_LEVEL} -fPIC -Wl,-Bsymbolic" \
345
+ "-I${OPENSSL_PREBUILT_FOLDER}/include -I${TOOLCHAIN}/darwin-x86_64/sysroot/usr/include -fPIC -Wl,-Bsymbolic -Wl,-z,max-page-size=16384 -Wl,-z,common-page-size=16384" \
346
+ "-L${OPENSSL_PREBUILT_FOLDER}/x86_64 -L${TOOLCHAIN}/darwin-x86_64/sysroot/usr/lib/x86_64-linux-android/${API_LEVEL} -fPIC -Wl,-Bsymbolic -Wl,-z,max-page-size=16384 -Wl,-z,common-page-size=16384" \
346
347
  "--enable-openssl --extra-libs=-lz"
347
348
 
348
349
  rm -rf ${OUTPUT_DIR}/android/x86_64/share