我对这整个Gradle和Android Studio支持都很陌生.我已设法使用导出选项将我的android项目转换为gradle.
但我正在寻找一些文档或开始如何将NDK构建集成到gradle构建过程中.
如果可能的话,我还需要某种"后"阶段,将构建二进制文件(.so文件)复制到资产目录.
在 Android Studio 1.3.2 中,我已经设置了sdk.dir和ndk.dirset in local.properties,但是如何在我的 gradle 构建脚本中访问它们?
我想要做的是手动调用 ndk-build,而不必硬编码 ndk-build 的路径,该路径现在位于 的已知位置sdk/ndk-bundle/ndk-build。这些路径变量是否公开,或者如何公开它们?
所以我从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)