Java.lang.UnsatisfiedLinkError: no implementation implemented for Boolean

I use the “.so” files in my project, but it gives the following error: “ java.lang.UnsatisfiedLinkError: no implementation for Boolean found ”, I'm already trying to recreate “.so” using Cygwin and put it in the jniLibs folder , and also create a jar , but it gives the same error.

But in my existing project the same .so file works. I try so much, but its not working at all, what can I do?

com.amaze.filemanager E / art: the realization of boolean com.amaze.filemanager.scanner.SignatureLib.InitScanner (java.lang.String, java.lang.String) found (and tried Java_com_amaze_filemanager_scanner_SignatureLib_InitScanner Java_com_amaze_filemanager_scanner_SignatureLib_InitScanner__Ljava_lang_String_2Ljava_lang_String_2) 12-19 11 47 : 07.463 4579-4934 / com.amaze.filemanager E / AndroidRuntime: FATAL EXCEPTION: Thread-5230 Process: com.amaze.filemanager, PID: 4579 java.lang.UnsatisfiedLinkError: implementation not found for boolean com.amaze.filemanager.scanner .SignatureLib.InitScanner (java.lang.String, java.lang.String) (tried Java_com_amaze_filemanager_scanner_SignatureLib_InitScanner and Java_com_amaze_filemanager_scanner_SignatureLib_InitScanner__Ljava_lang_String_2Ljava_lang_String_2) at com.amaze.filemanager.scanner.SignatureLib.InitScanner (own method) at com.amaze.filemanager.scanner.SignatureLib.InitializeScanner (SignatureLib.java:42) at com.amaze.filemanager. scanner.Signature. (Signature.java:62) at com.amaze.filemanager.ScanForVirusActivity $ 1.run (ScanForVirusActivity.java:66)66)66)InitScanner (native method) at com.amaze.filemanager.scanner.SignatureLib.InitializeScanner (SignatureLib.java:42) at com.amaze.filemanager.scanner.Signature. (Signature.java:62) at com.amaze.filemanager.ScanForVirusActivity $ 1.run (ScanForVirusActivity.java:66)InitScanner (native method) at com.amaze.filemanager.scanner.SignatureLib.InitializeScanner (SignatureLib.java:42) at com.amaze.filemanager.scanner.Signature. (Signature.java:62) at com.amaze.filemanager.ScanForVirusActivity $ 1.run (ScanForVirusActivity.java:66)ScanForVirusActivity $ 1.run (ScanForVirusActivity.java:66)ScanForVirusActivity $ 1.run (ScanForVirusActivity.java:66)

public class SignatureLib {

    static {
        System.loadLibrary("Signature");
    }

    SharedPreferencesUtils spu;
    Context context;

    public SignatureLib(Context context) {
        this.context = context;
    }

    private native boolean InitScanner(String strDBPath, String dbPathTemp);

    private native boolean DeInitScanner();

    private native String checkVirus(String filepath);

    private native boolean UploadFile(String FilePath, String DeviceID, String path);

    private native boolean DownloadFile(String FilePath, String DeviceID, String path);

    private native boolean IsGameApp(String AppName);

    private native boolean SetUpdateInProgressStatus(boolean bStatus);

    public boolean InitializeScanner(String strDBPath) {

        spu = new SharedPreferencesUtils();
        String packageName = context.getPackageName();
        String dbPathTemp = "data/data/" + packageName + "/";

        return InitScanner(strDBPath, dbPathTemp);
    }

}
+4
2

, - , . , .so InitScanner, C, , . , ++, extern C.

+1

java "native-lib"

package primeno.naval.com.primenumberusingndk;
static
{
  System.loadLibrary("native-lib");
}

CPP

public native String stringFromJNI();
public native boolean isPrime(int n);

cpp

extern "C"
JNIEXPORT jstring JNICALL Java_primeno_naval_com_primenumberusingndk_MainActivity_stringFromJNI(
JNIEnv *env,
jobject /* this */) {
std::string hello = "Hello from C++";
return env->NewStringUTF(hello.c_str());
}

extern "C"
JNIEXPORT jboolean JNICALL Java_primeno_naval_com_primenumberusingndk_MainActivity_isPrime(JNIEnv *env,jobject ,jint no)
{
PrimeNumber primeNumber(no);
return primeNumber.isPrime();
}

extern "C" {

    JNIEXPORT jstring JNICALL Java_primeno_naval_com_primenumberusingndk_MainActivity_stringFromJNI(
    JNIEnv *env,
    jobject /* this */) {
    std::string hello = "Hello from C++";
    return env->NewStringUTF(hello.c_str());
    }

    JNIEXPORT jboolean JNICALL Java_primeno_naval_com_primenumberusingndk_MainActivity_isPrime(JNIEnv *env,jobject ,jint no)
    {
    PrimeNumber primeNumber(no);
    return primeNumber.isPrime();
    }
}

, extern "C" cpp,

extern "C" JNIEXPORT <RETURN_TYPE> JNICALL Java_<PACKAGE_NAME>_<JAVA_CLASS>_<METHOD_NAME>(
JNIEnv *env, jobject obj, <METHOD_PARAMETERS>...) {
...
}

extern "C":

, ++ C. , ++ , , ++ , C. extern "C" Java ( ). , , ++, C.

JNIEXPORT:

, .

<RETURN_TYPE>:

JNI, Java. , jstring, String Java.

JNICALL: C

, , JNI.

<JAVA_CLASS>:

Java- . MainActivity, Java, .

<PACKAGE_NAME>:

, <JAVA_CLASS>. (.) (_).

<METHOD_NAME>:

, . getNativeString(). getNativeString().

JNIEnv *env:

(, ), JNI, , , NewStringUTF (). , #include.

jobject obj:

Java-, <JAVA_CLASS>.

<METHOD_PARAMETERS>...:

-, . getNativeString() , , .

-1

Source: https://habr.com/ru/post/1663914/


All Articles