jnr / jnr-ffi

Java Abstracted Foreign Function Layer
Other
1.25k stars 156 forks source link

Erorr : jnr.ffi.provider.jffi.Provider #310

Open 2246sam20 opened 1 year ago

2246sam20 commented 1 year ago

Hello! I am trying to run native Functions on Android mobile using android studio I am using Android studio and took reference from the JNR docs and

implementation("com.github.jnr:jnr-ffi:2.2.12") adding jnr as dependency in build.gradle file

public class HelloWorld {
    public interface LibC {
        int setenv(@In String name, @In String value, @In boolean overwrite);

        int unsetenv(@In String name);

        String getenv(@In String name);
        int clearenv();
        int puts(String s);
    }
    public static void main(String[] args) {
        Map<LibraryOption, Object> libraryOptions = new HashMap<>();
        libraryOptions.put(LibraryOption.LoadNow, true);
        libraryOptions.put(LibraryOption.IgnoreError, true);
        String libName = Platform.getNativePlatform().getStandardCLibraryName();

        LibC libc = LibraryLoader.loadLibrary(
                LibC.class,
                libraryOptions,
                libName
        );
        final String pwdKey = "PWD"; // key for working directory
        final String shellKey = "SHELL"; // key for system shell (bash, zsh etc)

        libc.puts("Hello World!");
        // even the special "_" environment variable is now null
    }
This is my  MainActivity.kt file
     override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        var args: Array<String> = arrayOf("shutdown");
        HelloWorld.main(args)

}

And I m checking this android app on a mobile phone for now After I Run the app it quickly crashes

Below is the error m getting:

AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.hdmitest_v2, PID: 5869
    java.lang.UnsatisfiedLinkError: could not load FFI provider jnr.ffi.provider.jffi.Provider
        at jnr.ffi.provider.InvalidProvider$1.loadLibrary(InvalidProvider.java:49)
        at jnr.ffi.LibraryLoader.load(LibraryLoader.java:420)
        at jnr.ffi.LibraryLoader.loadLibrary(LibraryLoader.java:174)
        at jnr.ffi.LibraryLoader.loadLibrary(LibraryLoader.java:192)
        at com.example.hdmitest_v2.HelloWorld.main(HelloWorld.java:44)