在调试中工作,但在发布中不工作 |世博会 | react-native-unimodules

Posted

技术标签:

【中文标题】在调试中工作,但在发布中不工作 |世博会 | react-native-unimodules【英文标题】:Works in debug but not in release | expo-av | react-native-unimodules 【发布时间】:2020-04-21 08:01:06 【问题描述】:

环境

Expo CLI 3.11.1 环境信息: 系统: 操作系统:Windows 10 二进制文件: 纱线:1.22.4 - C:\Users\user\AppData\Roaming\npm\yarn.CMD npm: 6.12.0 - C:\Program Files\nodejs\npm.CMD IDE: android Studio:版本 3.6.0.0 AI-192.7142.36.36.6308749

设备上的 React-native android

复制步骤:

1.

npx react-native init ReactRelease --version 0.62.2
npm install react-native-unimodules@0.9.0 --save 
expo install expo-av

2.

根据每个库中的文档配置文件

3.

编辑 App.js

import React,  Component  from 'react';
import  Text, StyleSheet, View, Button, Alert  from 'react-native';
import  Audio  from 'expo-av';
import * as Permissions from 'expo-permissions';

var audioObjectActions = new Audio.Sound();

export default class App extends Component 
    constructor(props) 
        super(props);

        this.state = ;
    

    async componentDidMount() 
        await Permissions.askAsync(Permissions.AUDIO_RECORDING);
        await Audio.setAudioModeAsync(
            staysActiveInBackground: true,
            allowsRecordingios: false,
            interruptionModeIOS: Audio.INTERRUPTION_MODE_IOS_DUCK_OTHERS,
            playsInSilentModeIOS: true,
            playThroughEarpieceAndroid: false,
            interruptionModeAndroid: Audio.INTERRUPTION_MODE_ANDROID_DUCK_OTHERS,
            shouldDuckAndroid: true
        );
    

    async _playRandomAction() 
        try 
            audioObjectActions.setOnPlaybackStatusUpdate(this._onPlaybackStatusUpdateAction);
            await audioObjectActions.loadAsync(require('./assets/song_sound.m4a'));
            await audioObjectActions.playAsync();
         catch (error) 
            Alert.alert('ERROR : ', '' + JSON.stringify(error));
        
    

    _onPlaybackStatusUpdateAction = async (playbackStatus) => 
        if (!playbackStatus.isLoaded) 
            // Update your UI for the unloaded state
            if (playbackStatus.error) 
                console.log(`Encountered a fatal error during playback: $playbackStatus.error`);
                // Send Expo team the error on Slack or the forums so we can help you debug!
            
         else 
            if (playbackStatus.didJustFinish && !playbackStatus.isLooping) 
                await audioObjectActions.stopAsync();
                await audioObjectActions.unloadAsync();
            
        
    ;

    render() 
        return (
            <View style=styles.container>
                <Text> Test Audio </Text>
                <Button title="On joue le morceau" onPress=async () => this._playRandomAction() />
            </View>
        );
    


const styles = StyleSheet.create(
    container: 
        flex: 1,
        justifyContent: 'center',
        alignItems: 'center',
        backgroundColor: '#555555'
    
);

4.

创建 assets 文件夹并像这样添加 song_sound.m4a:

5

通过 USB 连接您的安卓设备

调试中测试:

//POWERSHELL 1
npx react-native run-android   

//POWERSHELL 2
npm start 

行为

完美运行:声音已加载并播放

发布中测试

cd android 
./gradlew assembleRelease
./gradlew installRelease

行为

声音没有加载,显示的错误是:


    "nativeStackAndroid":[],
    "userInfo":null,
    "message":"com.google.android.exoplayer2.upstream.FileDataSource$FileDataSourceException: java.io.FileNotFoundException: assets_song_sound: open fialed: ENOENT (No such file or directory)",
    "code":"E_LOAD_ERROR",
    "line": 18,
    "column": 1111,
    "sourceURL":"index.android.bundle"

我想要什么?

只需像在调试中一样在发行版中加载和播放音频。

【问题讨论】:

我也尝试将音频文件放入android\app\src\main\res\raw,但同样的错误仍然存​​在。 【参考方案1】:

我终于找到了答案。

工作原理

require()

在发布时效果不佳。


我不知道为什么 require() 在与 Image 一起发布时效果很好,但在 Audio

上效果不佳

所以你需要使用

 uri: 'asset:/my_sound.m4a' 

并将您的声音文件(如 my_sound.m4a)放入 android/app/src/main/assets:

它会起作用的。

【讨论】:

我在我的裸项目中添加了 expo-av 的 unimodules,它在 dev 上运行良好,但发布 apk 甚至没有启动。 有没有办法让它在世博管理项目上工作?

以上是关于在调试中工作,但在发布中不工作 |世博会 | react-native-unimodules的主要内容,如果未能解决你的问题,请参考以下文章

触摸在本机反应中无法在博览会网络中工作

innerHTML 在 FF 中工作,但在 IE 中不工作!

MySql 查询在 PHPmyadmin 中工作,但在 codeigniter 中不工作

查询在 PHPMyAdmin 中工作但在 PHP 中不工作

<button> 在 chrome 中工作,但在 Firefox 中不工作 - 为啥?

iAP 在 Sandbox 中工作,但在“等待开发者发布”版本中不工作