Ваша проблема в том, что вы пытаетесь вызвать нативную функцию из класса, которому она не принадлежит.
Вы определили следующую функцию JNI в вашем файле c:
jstring Java_com_example_native_NativeTestActivity_getNewString()
Это говорит о том, что встроенная функция при загрузке будет привязана к методу, объявленному как собственный в классе NativeTestActivity .Поэтому, когда вы пытаетесь вызвать его из вашего View класса, он не находит никакой функции для привязки.
В этом случае он будет искать следующую функцию (которая, конечно, несуществует в вашем .so):
jstring Java_com_example_native_BitmapView_getNewString()
Если вы все еще хотите иметь возможность вызывать одну и ту же функцию из разных классов, вы можете объявить ее в классе контейнера, к которому можно получить доступ излюбой класс, который вы хотите.
например:
код Java :
package com.example.native;
public class NativeHelper {
public native String getNewString();
static
{
System.loadLibrary("nativeTest");
}
}
c код:
jstring Java_com_example_native_NativeHelper_getNewString(JNIEnv* env, jobject javaThis)
{
return (*env)->NewStringUTF(env, "Hello from native code!");
}