--EDIT--由于模糊的build.gradle,我有太多版本的共享库浮动了...
./src/main/jniLibs/armeabi-v7a/libaudioboo-native.so
rob@ app$ rm ./src/main/libs/armeabi-v7a/libaudioboo-native.so
rob@ app$ rm ./src/main/obj/local/armeabi-v7a/libaudioboo-native.so
rob@ app$ rm ./src/main/jniLibs/armeabi-v7a/libaudioboo-native.so
Run Code Online (Sandbox Code Playgroud)
已解决的问题 - 将构建更改为以下内容仅使用./src/main/libs中的共享库
sourceSets {
main {
jni.srcDirs = [] /*disable automatic ndk-build call */
jniLibs.srcDir 'src/main/libs'
}
}
Run Code Online (Sandbox Code Playgroud)
在android5上打破了所以我通过为Android-studio(1.0)ndk build推文来解决它.我按照答案@holo的指示扫描了所有'findClass'的代码.注 - 在第34行更改了字符串常量
"fm.audioboo.jni.FLACStreamEncoder"; to "fm/audioboo/jni/FLACStreamEncoder";
Run Code Online (Sandbox Code Playgroud)
那并没有解决任何问题.
java代码调用一个函数,在该本机函数执行之前,看起来艺术框架本身就是在第二个arg中使用一个错误的char分隔符调用FindClass(_JNIEnv*,char const*).如果查看pastebin链接的第46-48行,它看起来就像调用本机函数一样.该框架只会抛出错误的包名称Findclass错误.请注意,本机函数的第一行是在运行时未到达的日志语句.
Java层......
public FLACStreamEncoder(String outfile, int sample_rate, int channels,
int bits_per_sample)
{
init(outfile, sample_rate, channels, bits_per_sample);
}
...
native private void init(String outfile, int sample_rate, int channels,
int bits_per_sample);
...
static {
System.loadLibrary("audioboo-native");
}
Run Code Online (Sandbox Code Playgroud)
CPP层...函数永远不会到达第一行日志stmt.
extern "C" { …Run Code Online (Sandbox Code Playgroud)