在Android Studio中使用libpd

Ale*_*lex 6 android android-studio libpd

所以我从https://github.com/libpd/pd-for-android获得了git repo,并在Android Studio中为我的"AmazingSynthesizer"创建了一个新的空白项目.

我使用"导入模块"向导导入PdCore和AndroidMidi.然后,右键单击"app"查看我的"模块设置".在依赖项下,我添加了PdCore作为模块依赖项.另外,我添加了AndroidMidi作为"PdCore"的模块依赖项.

到目前为止,这对我来说似乎是正确的.我的应用程序的build.gradle包含库,我可以在MainActivity中导入PdDispatcher.问题是,它似乎仍然错过了本机库(我想!).

官方libpd书中的基本示例代码(由Peter Brinkmann制作音乐应用程序)

PdAudio.initAudio(sampleRate, 0, 2, 8, true);
Run Code Online (Sandbox Code Playgroud)

悲惨地失败了

java.lang.UnsatisfiedLinkError: Couldn't load pd from loader dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.app.amazingsynthesizer-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.app.amazingsynthesizer-1, /vendor/lib, /system/lib]]]: findLibrary returned null
        at java.lang.Runtime.loadLibrary(Runtime.java:358)
        at java.lang.System.loadLibrary(System.java:526)
        at org.puredata.core.PdBase.<clinit>(PdBase.java:55)
        at org.puredata.android.io.PdAudio.startAudio(PdAudio.java:86)
        at com.app.amazingsynthesizer.MainActivity.onResume(MainActivity.java:62)
        at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1192)
        at android.app.Activity.performResume(Activity.java:5310)
        at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2764)
        at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2803)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2238)
        at android.app.ActivityThread.access$800(ActivityThread.java:135)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:136)
        at android.app.ActivityThread.main(ActivityThread.java:5001)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
        at dalvik.system.NativeStart.main(Native Method)
Run Code Online (Sandbox Code Playgroud)

Joe*_*eer 7

[2016年1月17日更新]

现在已经将pd-for-android库工件发布到jCenter,最简单的解决方案变得更加简单:没有克隆,没有导入; 只需编辑项目的build.gradle文件并添加编译依赖项org.puredata.android:pd-core:1.0.0.

有关帮助,请参阅pd-for-android的更新自述文件.

原来接受的答案:

启动和运行的最简单方法是将预构建的.so文件复制到:

AmazingSynthesizer/src目录/主/ jniLibs

对于您要定位的体系结构,您需要libpd.so和libpdnativeopensl.so,例如:

AmazingSynthesizer/src/main/jniLibs/armeabi/libpd.so AmazingSynthesizer/src/main/jniLibs/armeabi/libpdnativeopensl.so


Rub*_*ker 7

[更新于03.07.2016]

随着pd-for-android项目更新给出的新情况,我也更新了我的博客文章.看看这里:

博客文章:http://www.journal.deviantdev.com/pure-data-for-android-jcenter-gradle-dependecy/

示例项目:http://www.journal.deviantdev.com/sample-libpd-android-studio/


[原始答案]

基本上这个问题以不同的方式回答,但我想添加另一个答案来分享我的想法.我记录并更新了如何使用android studio运行libpd的不同方法.我将总结一下基本步骤:

  1. 获取Android Studio
  2. GitHub下载pd-for-android
  3. 在Android Studio中创建一个新项目
  4. 将AndroidMidi作为模块导入Android Studio
  5. 将PDCore作为模块导入Android Studio
  6. 将AndroidMidi的依赖项添加到PDCore
  7. 将PDCore的依赖项添加到您的应用程序

现在,您有两种可能的方法来实现它.您可以使用NDK构建pd-for-android并添加依赖项,或者您可以将jniLibs.srcDirs = ['src','libs']"添加到PdCore build.gradle.通常您会选择第二种方式,除非您有编译一些默认情况下不带pd-for-android的外部组件.

在这里,您可以找到一些帖子,为Android Studio提供更多详细信息和示例项目:

祝好运!


归档时间:

查看次数:

2853 次

最近记录:

9 年,3 月 前