0

私のクライアントは、ビルド済みの .so 共有ライブラリを提供しています。libpdコントローラーはm4aPlayerモジュールをロードする必要があるため、libpdでロードするはずです。だから私はlibm4aPlayer.soをアプリ>メインの下のjniLibs(libsも試した)フォルダの中に入れてから、これをbuild.gradleに追加しました

defaultConfig {
        ndk{
            moduleName "m4aPlayer"
        }
    }
    ...

sourceSets {
        main {
            jni {
                srcDirs = []
            }
            jniLibs {
                srcDir 'libs'
            }
        }
    }

そして、AudioService クラス (initPd() および loadPatch()) で、クライアントがこれを実行して提供したネイティブのビルド済みライブラリを呼び出そうとしています。

patchFile = new File(pdFile[0].mFile.getParent(), "pd/_main.pd");

//System.loadLibrary("pd");
System.loadLibrary("m4aPlayer");

PdBase.openPatch(patchFile);
PdBase.sendFloat("fadeTime", 12f);

ここに画像の説明を入力

パッチ ファイル (_main.pd) を開こうとするたびに、PD コントローラーから「m4aPlayer を作成できませんでした」というエラーが表示されます。しかし、ライブラリをロードしようとしても、pd はこのエラーをスローします。他のオーディオは正常に再生されます (libpd は m4aPlayer グルーを必要としません)。

スタックトレース

05-30 21:48:05.840 6589-6589/com.test.test I/PdUiDispatcher: print: 
05-30 21:48:05.840 6589-6589/com.test.test I/PdUiDispatcher: print:  
05-30 21:48:05.840 6589-6589/com.test.test I/PdUiDispatcher: print: m4aPlayer
05-30 21:48:05.840 6589-6589/com.test.test I/PdUiDispatcher: print: 
05-30 21:48:05.840 6589-6589/com.test.test I/PdUiDispatcher: print: error: ... couldn't create
05-30 21:48:05.840 6589-6589/com.test.test I/PdUiDispatcher: print: 
05-30 21:48:05.840 6589-6589/com.test.test I/PdUiDispatcher: print:  
05-30 21:48:05.840 6589-6589/com.test.test I/PdUiDispatcher: print: m4aPlayer
05-30 21:48:05.841 6589-6589/com.test.test I/PdUiDispatcher: print: 
05-30 21:48:05.841 6589-6589/com.test.test I/PdUiDispatcher: print: error: ... couldn't create
05-30 21:48:05.841 6589-6589/com.test.test I/PdUiDispatcher: print: 
05-30 21:48:05.841 6589-6589/com.test.test I/PdUiDispatcher: print:  
05-30 21:48:05.841 6589-6589/com.test.test I/PdUiDispatcher: print: m4aPlayer
05-30 21:48:05.841 6589-6589/com.test.test I/PdUiDispatcher: print: 
05-30 21:48:05.841 6589-6589/com.test.test I/PdUiDispatcher: print: error: ... couldn't create
05-30 21:48:05.841 6589-6589/com.test.test I/PdUiDispatcher: print: fadeTime: 12
05-30 21:48:05.841 6589-6589/com.test.test I/PdUiDispatcher: print: fadeDelay: 3
05-30 21:48:05.841 6589-6589/com.test.test I/PdUiDispatcher: print: curve: 30
05-30 21:48:05.841 6589-6589/com.test.test I/PdUiDispatcher: print: musicVol: 1.5
05-30 21:48:05.841 6589-6589/com.test.test I/PdUiDispatcher: print: voiceVol: 1.5
05-30 21:48:05.841 6589-6589/com.test.test I/PdUiDispatcher: print: voiceGender: 1
05-30 21:48:05.841 6589-6589/com.test.test I/PdUiDispatcher: print: isRandom: 1
05-30 21:48:05.841 6589-6589/com.test.test I/PdUiDispatcher: print: suggestionsVO: 1
05-30 21:48:05.841 6589-6589/com.test.test I/PdUiDispatcher: print: availableSoundscapes:
05-30 21:48:05.842 6589-6589/com.test.test I/PdUiDispatcher: print:  
05-30 21:48:05.842 6589-6589/com.test.test I/PdUiDispatcher: print: 2
05-30 21:48:05.842 6589-6589/com.test.test I/PdUiDispatcher: print:  
05-30 21:48:05.842 6589-6589/com.test.test I/PdUiDispatcher: print: 3
05-30 21:48:05.842 6589-6589/com.test.test I/PdUiDispatcher: print:  
05-30 21:48:05.842 6589-6589/com.test.test I/PdUiDispatcher: print: 4
05-30 21:48:05.842 6589-6589/com.test.test I/PdUiDispatcher: print:  
05-30 21:48:05.842 6589-6589/com.test.test I/PdUiDispatcher: print: 5
05-30 21:48:05.842 6589-6589/com.test.test I/PdUiDispatcher: print:  
05-30 21:48:05.842 6589-6589/com.test.test I/PdUiDispatcher: print: 6
05-30 21:48:05.842 6589-6589/com.test.test I/PdUiDispatcher: print:  
05-30 21:48:05.842 6589-6589/com.test.test I/PdUiDispatcher: print: 7
05-30 21:48:05.842 6589-6589/com.test.test I/PdUiDispatcher: print:  
05-30 21:48:05.842 6589-6589/com.test.test I/PdUiDispatcher: print: 8
05-30 21:48:05.842 6589-6589/com.test.test I/PdUiDispatcher: print:  
05-30 21:48:05.842 6589-6589/com.test.test I/PdUiDispatcher: print: 9
05-30 21:48:05.843 6589-6589/com.test.test I/PdUiDispatcher: print: 
05-30 21:48:05.843 6589-6589/com.test.test I/PdUiDispatcher: print: module: 2
05-30 21:48:05.843 6589-6589/com.test.test I/PdUiDispatcher: print: INTO-Q: 0
05-30 21:48:05.843 6589-6589/com.test.test I/PdUiDispatcher: print: soundscape: 5
05-30 21:48:05.843 6589-6589/com.test.test I/PdUiDispatcher: print: toApp-isThisFileOK: p5intro0

また、ライブラリがコピーされているかどうかを確認するためにアプリ内をチェックしようとしました。だから私はに行きました

data/data/package_name/lib

ここに画像の説明を入力

4

3 に答える 3

0

この回答は、いくつかの手がかりやヒントを提供する場合があります: https://stackoverflow.com/a/27523384/901597

于 2016-06-05T00:07:16.553 に答える
0

純粋なデータ外部をロードするために System.loadLibrary() を呼び出す必要はありません。

「helloworld.c」外部がそこでどのように使用されているかについての参照として、pd-for-android リポジトリのPdTest の例を見てください。これを独自のプロジェクトのテンプレートとして使用して、最初は物事を単純に保ち、純粋なデータ パッチが libm4aPlayer 外部を正しくロードできることを検証できます。

また、.mファイルについて言及しています。あなたはObjective Cをコンパイルしていると思いますか?pd-for-android でそれを行っている人を見たことがないので、それが機能するかどうかはわかりません。

于 2016-06-01T21:05:15.157 に答える
0

次の 3 つのオプションがあります。

  • Pd がライブラリ ファイルを見つけられません: フル パスを使用してみてください (または、[bonk~]ロードできるような他の外部ファイルを確認してください) 。

  • バイナリにはいくつかの依存関係がありません (Android に相当するものを確認してくださいldd) 。

  • バイナリは Pd-external ではありません (顧客の主張にもかかわらず)

最後の 2 つのオプションをデバッグするには、冗長性を上げたり、アプリの stderr (およびおそらく stdout) を監視したりすることもできます。

于 2016-06-06T22:08:18.417 に答える