GithubHelp home page GithubHelp logo

molotovcherry / android-imagemagick7 Goto Github PK

View Code? Open in Web Editor NEW
164.0 6.0 50.0 73.84 MB

Fully featured, latest builds of imagemagick 7 for Android. Featuring a full build of very many libraries (delegates)

Makefile 2.61% Roff 0.35% Shell 0.78% C 69.44% C++ 24.29% Batchfile 0.02% XSLT 0.01% CSS 0.01% Perl 0.18% HTML 0.12% Fortran 0.05% Python 0.30% M4 0.11% sed 0.01% Emacs Lisp 0.01% Assembly 1.57% CMake 0.02% Pascal 0.12% Java 0.02% Dockerfile 0.01%
imagemagick android libjpeg-turbo libfftw libopenjpeg libfreetype2 libpng libtiff libwebp libxml2

android-imagemagick7's Introduction

Hi there ๐Ÿ‘‹ I'm Cherry

I'm a software engineer who's very passionate about Rust. I have experience in systems programming, Android app development, web technologies, and some game design using Unity.

In my personal time:

  • ๐Ÿ”ญ Iโ€™m currently working on assorted projects
  • ๐Ÿ’ฌ Ask me about anything Rust
  • ๐Ÿ˜ƒ For fun, I like:
    • watching anime
    • making music (FL Studio)
    • reading about science/physics/finance stuff/manga/light novels
    • working with computer hardware
    • learning psychology/self-improvement
  • ๐Ÿ’ป For inquiries, please see below on how to contact me.

๐Ÿ”— You can view my github site/blog here

Tools / Languages

Rust Kotlin Ruby Go Python C Sharp Java HTML5 JavaScript CoffeeScript CSS3 Sass PHP SQLite MySQL MongoDB PowerShell Bash JSON Markdown

Windows Linux Windows Terminal Linux Terminal IntelliJ IDEA CLion Visual Studio Code Android Studio Android Android Room Git Subversion GitHub GitHub Actions GitHub Pages Docker JNI Unity Blender Apache NGINX Fastify Node.js jQuery AngularJS React MUI Joomla phpMyAdmin Django Qt Microsoft Office TeamViewer Discord

Contact

  • StackOverflow: Kobato
  • Discord: /molotov/cherry/ (remove all forward slashes) or join my server.
    • If I don't accept your request, you might want to contact me on server instead; I get spam requests and don't always know when a request is legitimate; even if adding me directly fails, joining and pinging me in my server always works.

GitHub Stats

MolotovCherry's stats MolotovCherry's top language stats

android-imagemagick7's People

Contributors

malaythecool avatar molotovcherry avatar web-flow avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

android-imagemagick7's Issues

Instructions for running directly from ADB shell

This is not really an issue, but rather a would-be Wiki article if this repo had a wiki, or maybe there should be a section in the readme for people who just want to use this tool from the adb shell, and not embed it in an application. I've seen multiple (closed) issues asking for this, so there's clearly interest.

  • Download the static zip file and extract it. You will have a folder with 3 files: libc++_shared.so, libomp.so and magick.
  • Use ADB to put those files in a path where files can be executed from. The home path and the sdcard are not valid locations. For this example, I put the three files in a folder called magick and then ran adb push magick /data/local/tmp to push the whole folder into /data/local/tmp/magick
  • Run adb shell to get to the command line, and then change to the path where the files reside, and set the binary as executable:
    • cd /data/local/tmp/magick
    • chmod 0755 magick
  • If you try to run ./magick now, it will not work because it can't find the library path. You need to set up the environment variables:
    • export TMPDIR=/data/local/tmp
    • export MAGICK_HOME=/data/local/tmp/magick
    • export LD_LIBRARY_PATH=/data/local/tmp/magick
  • You can now run ./magick and it will give you the usage instructions. For example, this will capture the screen and then create a new PNG file with the 32x32 box at 500,500:
    • screencap -p screen.png
    • ./magick screen.png -crop 32x32+500+500 crop.png

Obviously setting up the environment variables every time would get tedious, so you should use a shell script for this.

OpenMP ../jniLibs/arm64-v8a/libomp.so: Error while running build-release command windows 10

[arm64-v8a] OpenMP ../jniLibs/arm64-v8a/libomp.so:
The system cannot find the path specified.
make: *** [C:/Android/sdk/ndk-bundle/build//../build/core/openmp.mk:46: ../jniLibs/arm64-v8a/libomp.so] Error 1
make: *** Waiting for unfinished jobs....
[arm64-v8a] Compile : magick <= magick.c

@cherryleafroad can you help please.

I am following the steps,

  1. Created a new empty android studio project
  2. Copied android sources to the created project
  3. Copied libOpenCl.so from device to the jniLibs folder
  4. But when i running build-release command, i am getting the above error.

My Project Structure is,

project structure

I saw your "build.gradle" file and added lines. I can clearly see libc++_shared.so under "data/app/package/lib/arm64/" directory. Is that the right path where the lib should be present?

I saw your "build.gradle" file and added lines. I can clearly see libc++_shared.so under "data/app/package/lib/arm64/" directory. Is that the right path where the lib should be present?
I tried to execute the cmd using env as follows-

ArrayList<String> env = new ArrayList<>();
        env.add("TMPDIR=" + file.getAbsolutePath()+"/");
        env.add("MAGICK_HOME=" + getFilesDir().getAbsolutePath()+"/usr/");
        env.add("ICU_DATA_DIR_PREFIX=" +getFilesDir().getAbsolutePath()+"/usr/");
        env.add("LD_LIBRARY_PATH=" + this.getApplicationInfo().nativeLibraryDir);
        for (Map.Entry<String, String> entry : System.getenv().entrySet()) {
            env.add(entry.getKey() + "=" + entry.getValue());
        }
        String[] ENV = env.toArray(new String[0]);
        try {
            Process proc = Runtime.getRuntime().exec(ed, ENV);
        } catch (IOException e) {
            e.printStackTrace();
            Toast.makeText(this,"catch run",Toast.LENGTH_SHORT).show();
        }

I am getting the null pointer exception as

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.io.File.getAbsolutePath()' on a null object reference
        at com.iamtrk.imagemagicktest.MainActivity.executecommand(MainActivity.java:121)
        at com.iamtrk.imagemagicktest.MainActivity$1.onClick(MainActivity.java:66)
        at android.view.View.performClick(View.java:5647)
        at android.view.View$PerformClick.run(View.java:22462)
        at android.os.Handler.handleCallback(Handler.java:754)

But I can see the env defined folders are at proper location by device manager of android studio.
Thanks

Originally posted by @rupesh-kumar-lpu in #5 (comment)

please add it to f-droid

Hello
Thank you for this great work.
may you please add this to F-droid?
Thank you very much.

OpenCL support

This is mostly finished and working, just a little work before it's ready for publishing.

  • Building a magick binary with opencl doesn't work, however enabling and linking opencl to the shared libraries works, and it runs perfectly on the device.

Example command

Thanks so much for this contribution!!

I have everything compiling and would like to use the binary. How would I call a command?

In Process proc = Runtime.getRuntime().exec(cmd, ENV);

Could you give me an example of what the cmd parameter should look like?

couldn't find "libjmagick-7.so"

I am getting following exception when tried to use in my android studio project
couldn't find "libjmagick-7.so"
at java.lang.Runtime.loadLibrary0(Runtime.java:984)
at java.lang.System.loadLibrary(System.java:1562)
at magick.Magick.(Magick.java:22)
If I am missing anything ?
please help

error: variable 'output' set but not used [-Werror,-Wunused-but-set-variable]

I forked this repo, cloned it to my windows 11 pc, and edited the application.mk file like this:

...
HDRI_ENABLE   := false
# 8, 16, 32
QUANTUM_DEPTH := 8
...
STATIC_BUILD     := false
# magick bin requires magick wand API
BUILD_MAGICK_BIN := true
BUILD_MAGICKWAND := true
# requires magickwand
BUILD_MAGICKPP   := true

And I edited build-release.bat like this:

...
path-to-my-ndk-build\ndk-build --output-sync=none NDK_PROJECT_PATH=./ NDK_APPLICATION_MK=Application.mk APP_BUILD_SCRIPT=Android.mk NDK_OUT=./build/ NDK_LIBS_OUT=./jniLibs -j 4 

Now I ran build-release.bat like this: .\build-release.bat.

The build starts but at the end I get 3 errors:

././libxml2-2.9.9/encoding.c:2397:12: error: variable 'writtentot' set but not used [-Werror,-Wunused-but-set-variable]
    size_t writtentot = 0;
././libxml2-2.9.9/encoding.c:2570:9: error: variable 'writtentot' set but not used [-Werror,-Wunused-but-set-variable]
    int writtentot = 0;
        ^
././libxml2-2.9.9/encoding.c:2572:9: error: variable 'output' set but not used [-Werror,-Wunused-but-set-variable]
    int output = 0;
        ^
3 errors generated.

I tried adding APP_CFLAGS += -Wno-error (also for cpp flags), but nothing changed.

Unable to save images

Hi,

This is really a great library.
However, I'm trying to save the image in my gallery path wherein the new path is provided.
image.write(ImageInfo) is not saving any image to gallery.

Also, there seemed to be missing functions of converting image to Bitmap.

It would be great if you can help me in that..

Regards,
Mohit

No implementation found for void magick.ImageInfo.init()

Hey, thanks for your work and contribution to open source community.

For the past two days I've been trying to make this lib work, but still no progress.
I'm trying to use it as a static .so lib through jmagick java interface.
And at runtime I'm getting this error:
Suppressed: java.lang.UnsatisfiedLinkError: No implementation found for void magick.ImageInfo.init() (tried Java_magick_ImageInfo_init and Java_magick_ImageInfo_init__) at magick.ImageInfo.init(Native Method) at magick.ImageInfo.<init>(ImageInfo.java:35)

Basically if we look inside Magick.java file, it says System.loadLibrary("jmagick-7");, so it
needs jmagick-7.so file inside libs folder. But there's nothing alike across the whole lib, I found
only one file called Android-ImageMagick7/libjmagick-7/android/app/src/main/assets/usr/bin/arm64-v8a/magick , I've renamed it to jmagick-7.so, but it didn't work.
Also I've rebuilt on my machine, but still got the same error above.

  1. How to get rid of the UnsatisfiedLinkError error?
  2. Why there's no jmagick-7.so file inside the lib, while Magick.java clearly requires it.
  3. _Android-ImageMagick7/libjmagick-7/android/app/libs/arm64-v8a/libc++shared.so what is this file, and should I load it dynamically in order to make the whole thing finally work?

Thanks

convert heif to png

I use magick for Windows, (ImageMagick-7.1.0-portable-Q16-x64), it could convert heif to png.
But your build could not do this work, just print error:

magick: NoDecodeDelegateForThisImageFormat `HEIF' @ error/constitute.c/ReadImage/738.

So how to build a elf file to convert heif/heic to png?

[Q] Build Image MagicK for Android

Wow, finally I found the library that can support converting between HEIF format. Before, I'm using the HEIC Nokia library for parsing data from HEIF format and then convert it to others.

I want to create a new other app using Image Magick and they redirect me to be here.
Firstly, thank you very much for your contributions. I think this is an actively version of ImageMagick for android as now. So, I have a look as on, but it seems to be like your documents are not fully finished, right?

I have cloned this project on the mine, then try to some config, and take a look at the WIKI, you just write something with config the on the Environment variable, then what should I do later?

Also, I have some questions.

  1. Your script build is only on Windows (.bat), right?
  2. How can I support others architecture like mips, intel, x86, x64 .... bla bla
  3. Based on the document. You do not offer a target SDK at least API 24. Is this imposible for support min SDK from 19?

Very happy to contribute with you to the porting library as an open source.
Regards.

how to use this software?

Sorry for my bad English and using issue, I don't understand how to use discussion
I like to use ImageMagick "convert" to split images that downloaded from tachiyomi
because some comic pages have long-strips that slowing down the android,
i usually move the file from android, do this code
for /r "%~dp0" %%x in (*.jpg) do convert -crop 100%x50% "%~1" "%~dpn1_CR%~x1"
then move back to android,

i don't understand how to do this,
can you do something about it,
my question is: how to do this on android

anyway this my android spec

OS 	Android 6.0.1 (Marshmallow), MIUI 9.2
Chipset 	Qualcomm MSM8937 Snapdragon 430 (28 nm)
CPU 	Octa-core 1.4 GHz Cortex-A53
GPU 	Adreno 505

thank you for reading, have a nice day

How to use the shared libraries with flutter android?

I downloaded the latest android release from this repo, and added them to my project, but I get alot of errors:

[   +2 ms] FAILURE: Build failed with an exception.
[   +4 ms] * What went wrong:
[        ] Execution failed for task ':image_magick_ffi:buildCMakeDebug[armeabi-v7a]'.
[        ] > Build command failed.
[        ]   Error while executing process /home/haidar/Android/Sdk/cmake/3.18.1/bin/ninja with arguments {-C /home/haidar/dev_haidar/flutter/image_magick_ffi/android/.cxx/Debug/b5x10294/armeabi-v7a image_magick_ffi}
[        ]   ninja: Entering directory `/home/haidar/dev_haidar/flutter/image_magick_ffi/android/.cxx/Debug/b5x10294/armeabi-v7a'
[        ]   [1/1] Linking C shared library /home/haidar/dev_haidar/flutter/magick_app/build/image_magick_ffi/intermediates/cxx/Debug/b5x10294/obj/armeabi-v7a/libimage_magick_ffi.so
[        ]   FAILED: /home/haidar/dev_haidar/flutter/magick_app/build/image_magick_ffi/intermediates/cxx/Debug/b5x10294/obj/armeabi-v7a/libimage_magick_ffi.so 
[        ]   : && /home/haidar/Android/Sdk/ndk/21.1.6352462/toolchains/llvm/prebuilt/linux-x86_64/bin/clang --target=armv7-none-linux-androideabi16 --gcc-toolchain=/home/haidar/Android/Sdk/ndk/21.1.6352462/toolchains/llvm/prebuilt/linux-x86_64 --sysroot=/home/haidar/Android/Sdk/ndk/21.1.6352462/toolchains/llvm/prebuilt/linux-x86_64/sysroot -fPIC -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -D_FORTIFY_SOURCE=2 -march=armv7-a -mthumb -Wformat -Werror=format-security  -O0 -fno-limit-debug-info  -Wl,--exclude-libs,libgcc.a -Wl,--exclude-libs,libgcc_real.a -Wl,--exclude-libs,libatomic.a -static-libstdc++ -Wl,--build-id -Wl,--fatal-warnings -Wl,--exclude-libs,libunwind.a -Wl,--no-undefined -Qunused-arguments -shared -Wl,-soname,libimage_magick_ffi.so -o /home/haidar/dev_haidar/flutter/magick_app/build/image_magick_ffi/intermediates/cxx/Debug/b5x10294/obj/armeabi-v7a/libimage_magick_ffi.so CMakeFiles/image_magick_ffi.dir/image_magick_ffi.c.o -L/home/haidar/dev_haidar/flutter/image_magick_ffi/src/Dependencies/ImageMagick/lib/arm64-v8a /home/haidar/dev_haidar/flutter/image_magick_ffi/src/Dependencies/ImageMagick/lib/arm64-v8a/libmagickcore-7.so  /home/haidar/dev_haidar/flutter/image_magick_ffi/src/Dependencies/ImageMagick/lib/arm64-v8a/libmagickwand-7.so  /home/haidar/dev_haidar/flutter/image_magick_ffi/src/Dependencies/ImageMagick/lib/arm64-v8a/libomp.so  -latomic -lm && :
[        ]   /home/haidar/Android/Sdk/ndk/21.1.6352462/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin/ld: error: /home/haidar/dev_haidar/flutter/image_magick_ffi/src/Dependencies/ImageMagick/lib/arm64-v8a/libmagickcore-7.so: incompatible target
[        ]   /home/haidar/Android/Sdk/ndk/21.1.6352462/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin/ld: error: /home/haidar/dev_haidar/flutter/image_magick_ffi/src/Dependencies/ImageMagick/lib/arm64-v8a/libmagickwand-7.so: incompatible target
[        ]   /home/haidar/Android/Sdk/ndk/21.1.6352462/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin/ld: error: /home/haidar/dev_haidar/flutter/image_magick_ffi/src/Dependencies/ImageMagick/lib/arm64-v8a/libomp.so: incompatible target
[        ]   /home/haidar/dev_haidar/flutter/image_magick_ffi/src/image_magick_ffi.c:7: error: undefined reference to 'MagickGetException'
[        ]   /home/haidar/dev_haidar/flutter/image_magick_ffi/src/image_magick_ffi.c:16: error: undefined reference to 'MagickWandGenesis'
[        ]   /home/haidar/dev_haidar/flutter/image_magick_ffi/src/image_magick_ffi.c:27: error: undefined reference to 'NewMagickWand'
[        ]   /home/haidar/dev_haidar/flutter/image_magick_ffi/src/image_magick_ffi.c:32: error: undefined reference to 'MagickReadImage'
[        ]   /home/haidar/dev_haidar/flutter/image_magick_ffi/src/image_magick_ffi.c:46: error: undefined reference to 'MagickResizeImage'
[        ]   /home/haidar/dev_haidar/flutter/image_magick_ffi/src/image_magick_ffi.c:53: error: undefined reference to 'MagickSetImageCompressionQuality'
[        ]   /home/haidar/dev_haidar/flutter/image_magick_ffi/src/image_magick_ffi.c:60: error: undefined reference to 'MagickWriteImage'
[        ]   /home/haidar/dev_haidar/flutter/image_magick_ffi/src/image_magick_ffi.c:67: error: undefined reference to 'DestroyMagickWand'
[        ]   /home/haidar/dev_haidar/flutter/image_magick_ffi/src/image_magick_ffi.c:70: error: undefined reference to 'MagickWandTerminus'
[        ]   clang: error: linker command failed with exit code 1 (use -v to see invocation)
[        ]   ninja: build stopped: subcommand failed.
[        ] * Try:
[        ] > Run with --debug option to get more log output.
[        ] > Run with --scan to get full insights.
[        ] * Exception is:
[        ] org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':image_magick_ffi:buildCMakeDebug[armeabi-v7a]'.
[        ] 	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.lambda$executeIfValid$1(ExecuteActionsTaskExecuter.java:147)
[        ] 	at org.gradle.internal.Try$Failure.ifSuccessfulOrElse(Try.java:282)
[        ] 	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:145)
[        ] 	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:133)
[        ] 	at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:77)
[        ] 	at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)
[        ] 	at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:51)
[        ] 	at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)
[        ] 	at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56)
[        ] 	at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
[        ] 	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77)
[        ] 	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55)
[        ] 	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
[        ] 	at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
[        ] 	at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:199)
[        ] 	at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
[        ] 	at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
[        ] 	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
[        ] 	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
[        ] 	at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
[        ] 	at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73)
[        ] 	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52)
[        ] 	at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:74)
[        ] 	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:333)
[        ] 	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:320)
[        ] 	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:313)
[        ] 	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:299)
[        ] 	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.lambda$run$0(DefaultPlanExecutor.java:143)
[        ] 	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:227)
[        ] 	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.executeNextNode(DefaultPlanExecutor.java:218)
[        ] 	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:140)
[        ] 	at org.gradle.execution.plan.DefaultPlanExecutor.process(DefaultPlanExecutor.java:72)
[        ] 	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph.executeWithServices(DefaultTaskExecutionGraph.java:144)
[        ] 	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph.execute(DefaultTaskExecutionGraph.java:129)
[        ] 	at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:42)
[        ] 	at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:51)
[        ] 	at org.gradle.execution.BuildOperationFiringBuildWorkerExecutor$ExecuteTasks.call(BuildOperationFiringBuildWorkerExecutor.java:54)
[        ] 	at org.gradle.execution.BuildOperationFiringBuildWorkerExecutor$ExecuteTasks.call(BuildOperationFiringBuildWorkerExecutor.java:43)
[        ] 	at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
[        ] 	at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:199)
[        ] 	at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
[        ] 	at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
[        ] 	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
[        ] 	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
[        ] 	at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
[        ] 	at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73)
[        ] 	at org.gradle.execution.BuildOperationFiringBuildWorkerExecutor.execute(BuildOperationFiringBuildWorkerExecutor.java:40)
[        ] 	at org.gradle.internal.build.DefaultBuildLifecycleController.lambda$executeTasks$7(DefaultBuildLifecycleController.java:165)
[        ] 	at org.gradle.internal.model.StateTransitionController.doTransition(StateTransitionController.java:238)
[        ] 	at org.gradle.internal.model.StateTransitionController.lambda$tryTransition$8(StateTransitionController.java:174)
[        ] 	at org.gradle.internal.work.DefaultSynchronizer.withLock(DefaultSynchronizer.java:44)
[        ] 	at org.gradle.internal.model.StateTransitionController.tryTransition(StateTransitionController.java:174)
[        ] 	at org.gradle.internal.build.DefaultBuildLifecycleController.executeTasks(DefaultBuildLifecycleController.java:165)
[        ] 	at org.gradle.internal.build.DefaultBuildWorkGraphController$DefaultBuildWorkGraph.runWork(DefaultBuildWorkGraphController.java:142)
[        ] 	at org.gradle.composite.internal.DefaultBuildController.doBuild(DefaultBuildController.java:231)
[        ] 	at org.gradle.internal.Factories$1.create(Factories.java:31)
[        ] 	at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:270)
[        ] 	at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:119)
[        ] 	at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:124)
[        ] 	at org.gradle.composite.internal.DefaultBuildController.doRun(DefaultBuildController.java:204)
[        ] 	at org.gradle.composite.internal.DefaultBuildController.access$000(DefaultBuildController.java:51)
[        ] 	at org.gradle.composite.internal.DefaultBuildController$BuildOpRunnable.run(DefaultBuildController.java:264)
[        ] 	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
[        ] 	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
[        ] 	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
[        ] 	at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
[        ] 	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
[        ] 	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
[        ] 	at java.base/java.lang.Thread.run(Thread.java:829)
[        ] Caused by: org.gradle.internal.UncheckedException: Build command failed.
[        ] Error while executing process /home/haidar/Android/Sdk/cmake/3.18.1/bin/ninja with arguments {-C /home/haidar/dev_haidar/flutter/image_magick_ffi/android/.cxx/Debug/b5x10294/armeabi-v7a image_magick_ffi}
[        ] ninja: Entering directory `/home/haidar/dev_haidar/flutter/image_magick_ffi/android/.cxx/Debug/b5x10294/armeabi-v7a'
[        ] [1/1] Linking C shared library /home/haidar/dev_haidar/flutter/magick_app/build/image_magick_ffi/intermediates/cxx/Debug/b5x10294/obj/armeabi-v7a/libimage_magick_ffi.so
[        ] FAILED: /home/haidar/dev_haidar/flutter/magick_app/build/image_magick_ffi/intermediates/cxx/Debug/b5x10294/obj/armeabi-v7a/libimage_magick_ffi.so 
[        ] : && /home/haidar/Android/Sdk/ndk/21.1.6352462/toolchains/llvm/prebuilt/linux-x86_64/bin/clang --target=armv7-none-linux-androideabi16 --gcc-toolchain=/home/haidar/Android/Sdk/ndk/21.1.6352462/toolchains/llvm/prebuilt/linux-x86_64 --sysroot=/home/haidar/Android/Sdk/ndk/21.1.6352462/toolchains/llvm/prebuilt/linux-x86_64/sysroot -fPIC -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -D_FORTIFY_SOURCE=2 -march=armv7-a -mthumb -Wformat -Werror=format-security  -O0 -fno-limit-debug-info  -Wl,--exclude-libs,libgcc.a -Wl,--exclude-libs,libgcc_real.a -Wl,--exclude-libs,libatomic.a -static-libstdc++ -Wl,--build-id -Wl,--fatal-warnings -Wl,--exclude-libs,libunwind.a -Wl,--no-undefined -Qunused-arguments -shared -Wl,-soname,libimage_magick_ffi.so -o /home/haidar/dev_haidar/flutter/magick_app/build/image_magick_ffi/intermediates/cxx/Debug/b5x10294/obj/armeabi-v7a/libimage_magick_ffi.so CMakeFiles/image_magick_ffi.dir/image_magick_ffi.c.o -L/home/haidar/dev_haidar/flutter/image_magick_ffi/src/Dependencies/ImageMagick/lib/arm64-v8a /home/haidar/dev_haidar/flutter/image_magick_ffi/src/Dependencies/ImageMagick/lib/arm64-v8a/libmagickcore-7.so  /home/haidar/dev_haidar/flutter/image_magick_ffi/src/Dependencies/ImageMagick/lib/arm64-v8a/libmagickwand-7.so  /home/haidar/dev_haidar/flutter/image_magick_ffi/src/Dependencies/ImageMagick/lib/arm64-v8a/libomp.so  -latomic -lm && :
[        ] /home/haidar/Android/Sdk/ndk/21.1.6352462/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin/ld: error: /home/haidar/dev_haidar/flutter/image_magick_ffi/src/Dependencies/ImageMagick/lib/arm64-v8a/libmagickcore-7.so: incompatible target
[        ] /home/haidar/Android/Sdk/ndk/21.1.6352462/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin/ld: error: /home/haidar/dev_haidar/flutter/image_magick_ffi/src/Dependencies/ImageMagick/lib/arm64-v8a/libmagickwand-7.so: incompatible target
[        ] /home/haidar/Android/Sdk/ndk/21.1.6352462/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin/ld: error: /home/haidar/dev_haidar/flutter/image_magick_ffi/src/Dependencies/ImageMagick/lib/arm64-v8a/libomp.so: incompatible target
[        ] /home/haidar/dev_haidar/flutter/image_magick_ffi/src/image_magick_ffi.c:7: error: undefined reference to 'MagickGetException'
[        ] /home/haidar/dev_haidar/flutter/image_magick_ffi/src/image_magick_ffi.c:16: error: undefined reference to 'MagickWandGenesis'
[   +1 ms] /home/haidar/dev_haidar/flutter/image_magick_ffi/src/image_magick_ffi.c:27: error: undefined reference to 'NewMagickWand'
[        ] /home/haidar/dev_haidar/flutter/image_magick_ffi/src/image_magick_ffi.c:32: error: undefined reference to 'MagickReadImage'
[        ] /home/haidar/dev_haidar/flutter/image_magick_ffi/src/image_magick_ffi.c:46: error: undefined reference to 'MagickResizeImage'
[        ] /home/haidar/dev_haidar/flutter/image_magick_ffi/src/image_magick_ffi.c:53: error: undefined reference to 'MagickSetImageCompressionQuality'
[        ] /home/haidar/dev_haidar/flutter/image_magick_ffi/src/image_magick_ffi.c:60: error: undefined reference to 'MagickWriteImage'
[        ] /home/haidar/dev_haidar/flutter/image_magick_ffi/src/image_magick_ffi.c:67: error: undefined reference to 'DestroyMagickWand'
[        ] /home/haidar/dev_haidar/flutter/image_magick_ffi/src/image_magick_ffi.c:70: error: undefined reference to 'MagickWandTerminus'
[        ] clang: error: linker command failed with exit code 1 (use -v to see invocation)
[        ] ninja: build stopped: subcommand failed.
[        ] 	at org.gradle.internal.UncheckedException.throwAsUncheckedException(UncheckedException.java:68)
[        ] 	at org.gradle.internal.UncheckedException.throwAsUncheckedException(UncheckedException.java:41)
[        ] 	at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:107)
[        ] 	at org.gradle.api.internal.project.taskfactory.StandardTaskAction.doExecute(StandardTaskAction.java:58)
[        ] 	at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:51)
[        ] 	at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:29)
[        ] 	at org.gradle.api.internal.tasks.execution.TaskExecution$3.run(TaskExecution.java:242)
[        ] 	at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
[   +1 ms] 	at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
[        ] 	at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
[        ] 	at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
[        ] 	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
[        ] 	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
[        ] 	at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:47)
[        ] 	at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:68)
[        ] 	at org.gradle.api.internal.tasks.execution.TaskExecution.executeAction(TaskExecution.java:227)
[        ] 	at org.gradle.api.internal.tasks.execution.TaskExecution.executeActions(TaskExecution.java:210)
[        ] 	at org.gradle.api.internal.tasks.execution.TaskExecution.executeWithPreviousOutputFiles(TaskExecution.java:193)
[        ] 	at org.gradle.api.internal.tasks.execution.TaskExecution.execute(TaskExecution.java:171)
[        ] 	at org.gradle.internal.execution.steps.ExecuteStep.executeInternal(ExecuteStep.java:89)
[        ] 	at org.gradle.internal.execution.steps.ExecuteStep.access$000(ExecuteStep.java:40)
[        ] 	at org.gradle.internal.execution.steps.ExecuteStep$1.call(ExecuteStep.java:53)
[        ] 	at org.gradle.internal.execution.steps.ExecuteStep$1.call(ExecuteStep.java:50)
[        ] 	at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
[        ] 	at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:199)
[        ] 	at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
[        ] 	at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
[        ] 	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
[        ] 	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
[        ] 	at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
[        ] 	at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73)
[        ] 	at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:50)
[        ] 	at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:40)
[        ] 	at org.gradle.internal.execution.steps.RemovePreviousOutputsStep.execute(RemovePreviousOutputsStep.java:68)
[        ] 	at org.gradle.internal.execution.steps.RemovePreviousOutputsStep.execute(RemovePreviousOutputsStep.java:38)
[        ] 	at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:48)
[        ] 	at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:36)
[        ] 	at org.gradle.internal.execution.steps.CancelExecutionStep.execute(CancelExecutionStep.java:41)
[        ] 	at org.gradle.internal.execution.steps.TimeoutStep.executeWithoutTimeout(TimeoutStep.java:74)
[        ] 	at org.gradle.internal.execution.steps.TimeoutStep.execute(TimeoutStep.java:55)
[        ] 	at org.gradle.internal.execution.steps.CreateOutputsStep.execute(CreateOutputsStep.java:51)
[        ] 	at org.gradle.internal.execution.steps.CreateOutputsStep.execute(CreateOutputsStep.java:29)
[        ] 	at org.gradle.internal.execution.steps.CaptureStateAfterExecutionStep.execute(CaptureStateAfterExecutionStep.java:61)
[        ] 	at org.gradle.internal.execution.steps.CaptureStateAfterExecutionStep.execute(CaptureStateAfterExecutionStep.java:42)
[        ] 	at org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute(BroadcastChangingOutputsStep.java:60)
[        ] 	at org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute(BroadcastChangingOutputsStep.java:27)
[        ] 	at org.gradle.internal.execution.steps.BuildCacheStep.executeWithoutCache(BuildCacheStep.java:180)
[        ] 	at org.gradle.internal.execution.steps.BuildCacheStep.lambda$execute$1(BuildCacheStep.java:75)
[        ] 	at org.gradle.internal.Either$Right.fold(Either.java:175)
[        ] 	at org.gradle.internal.execution.caching.CachingState.fold(CachingState.java:59)
[        ] 	at org.gradle.internal.execution.steps.BuildCacheStep.execute(BuildCacheStep.java:73)
[        ] 	at org.gradle.internal.execution.steps.BuildCacheStep.execute(BuildCacheStep.java:48)
[        ] 	at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:36)
[        ] 	at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:25)
[        ] 	at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:36)
[        ] 	at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:22)
[        ] 	at org.gradle.internal.execution.steps.SkipUpToDateStep.executeBecause(SkipUpToDateStep.java:110)
[        ] 	at org.gradle.internal.execution.steps.SkipUpToDateStep.lambda$execute$2(SkipUpToDateStep.java:56)
[        ] 	at java.base/java.util.Optional.orElseGet(Optional.java:369)
[        ] 	at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:56)
[        ] 	at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:38)
[        ] 	at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:73)
[        ] 	at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:44)
[        ] 	at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:37)
[        ] 	at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:27)
[        ] 	at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:89)
[        ] 	at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:50)
[        ] 	at org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:114)
[        ] 	at org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:57)
[        ] 	at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:76)
[        ] 	at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:50)
[        ] 	at org.gradle.internal.execution.steps.SkipEmptyWorkStep.executeWithNoEmptySources(SkipEmptyWorkStep.java:249)
[        ] 	at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:86)
[        ] 	at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:54)
[        ] 	at org.gradle.internal.execution.steps.RemoveUntrackedExecutionStateStep.execute(RemoveUntrackedExecutionStateStep.java:32)
[        ] 	at org.gradle.internal.execution.steps.RemoveUntrackedExecutionStateStep.execute(RemoveUntrackedExecutionStateStep.java:21)
[        ] 	at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsStartedStep.execute(MarkSnapshottingInputsStartedStep.java:38)
[        ] 	at org.gradle.internal.execution.steps.LoadPreviousExecutionStateStep.execute(LoadPreviousExecutionStateStep.java:43)
[        ] 	at org.gradle.internal.execution.steps.LoadPreviousExecutionStateStep.execute(LoadPreviousExecutionStateStep.java:31)
[        ] 	at org.gradle.internal.execution.steps.AssignWorkspaceStep.lambda$execute$0(AssignWorkspaceStep.java:40)
[        ] 	at org.gradle.api.internal.tasks.execution.TaskExecution$4.withWorkspace(TaskExecution.java:287)
[        ] 	at org.gradle.internal.execution.steps.AssignWorkspaceStep.execute(AssignWorkspaceStep.java:40)
[        ] 	at org.gradle.internal.execution.steps.AssignWorkspaceStep.execute(AssignWorkspaceStep.java:30)
[        ] 	at org.gradle.internal.execution.steps.IdentityCacheStep.execute(IdentityCacheStep.java:37)
[        ] 	at org.gradle.internal.execution.steps.IdentityCacheStep.execute(IdentityCacheStep.java:27)
[        ] 	at org.gradle.internal.execution.steps.IdentifyStep.execute(IdentifyStep.java:44)
[        ] 	at org.gradle.internal.execution.steps.IdentifyStep.execute(IdentifyStep.java:33)
[        ] 	at org.gradle.internal.execution.impl.DefaultExecutionEngine$1.execute(DefaultExecutionEngine.java:76)
[        ] 	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:144)
[        ] 	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:133)
[        ] 	at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:77)
[        ] 	at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)
[        ] 	at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:51)
[        ] 	at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)
[        ] 	at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56)
[        ] 	at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
[        ] 	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77)
[        ] 	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55)
[        ] 	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
[        ] 	at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
[        ] 	at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:199)
[        ] 	at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
[        ] 	at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
[        ] 	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
[        ] 	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
[        ] 	at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
[        ] 	at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73)
[        ] 	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52)
[        ] 	at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:74)
[        ] 	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:333)
[        ] 	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:320)
[        ] 	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:313)
[        ] 	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:299)
[        ] 	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.lambda$run$0(DefaultPlanExecutor.java:143)
[        ] 	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:227)
[        ] 	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.executeNextNode(DefaultPlanExecutor.java:218)
[        ] 	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:140)
[        ] 	at org.gradle.execution.plan.DefaultPlanExecutor.process(DefaultPlanExecutor.java:72)
[        ] 	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph.executeWithServices(DefaultTaskExecutionGraph.java:144)
[        ] 	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph.execute(DefaultTaskExecutionGraph.java:129)
[        ] 	at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:42)
[        ] 	at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:51)
[        ] 	at org.gradle.execution.BuildOperationFiringBuildWorkerExecutor$ExecuteTasks.call(BuildOperationFiringBuildWorkerExecutor.java:54)
[        ] 	at org.gradle.execution.BuildOperationFiringBuildWorkerExecutor$ExecuteTasks.call(BuildOperationFiringBuildWorkerExecutor.java:43)
[        ] 	at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
[        ] 	at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:199)
[        ] 	at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
[        ] 	at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
[        ] 	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
[        ] 	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
[        ] 	at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
[        ] 	at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73)
[        ] 	at org.gradle.execution.BuildOperationFiringBuildWorkerExecutor.execute(BuildOperationFiringBuildWorkerExecutor.java:40)
[        ] 	at org.gradle.internal.build.DefaultBuildLifecycleController.lambda$executeTasks$7(DefaultBuildLifecycleController.java:165)
[        ] 	at org.gradle.internal.model.StateTransitionController.doTransition(StateTransitionController.java:238)
[        ] 	at org.gradle.internal.model.StateTransitionController.lambda$tryTransition$8(StateTransitionController.java:174)
[        ] 	at org.gradle.internal.work.DefaultSynchronizer.withLock(DefaultSynchronizer.java:44)
[        ] 	at org.gradle.internal.model.StateTransitionController.tryTransition(StateTransitionController.java:174)
[        ] 	at org.gradle.internal.build.DefaultBuildLifecycleController.executeTasks(DefaultBuildLifecycleController.java:165)
[        ] 	at org.gradle.internal.build.DefaultBuildWorkGraphController$DefaultBuildWorkGraph.runWork(DefaultBuildWorkGraphController.java:142)
[        ] 	at org.gradle.composite.internal.DefaultBuildController.doBuild(DefaultBuildController.java:231)
[        ] 	at org.gradle.internal.Factories$1.create(Factories.java:31)
[        ] 	at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:270)
[        ] 	at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:119)
[        ] 	at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:124)
[        ] 	at org.gradle.composite.internal.DefaultBuildController.doRun(DefaultBuildController.java:204)
[        ] 	at org.gradle.composite.internal.DefaultBuildController.access$000(DefaultBuildController.java:51)
[        ] 	at org.gradle.composite.internal.DefaultBuildController$BuildOpRunnable.run(DefaultBuildController.java:264)
[        ] 	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
[        ] 	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
[        ] 	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
[        ] 	at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
[        ] 	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
[        ] 	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
[        ] 	at java.base/java.lang.Thread.run(Thread.java:829)
[        ] Caused by: Build command failed.
[        ] Error while executing process /home/haidar/Android/Sdk/cmake/3.18.1/bin/ninja with arguments {-C /home/haidar/dev_haidar/flutter/image_magick_ffi/android/.cxx/Debug/b5x10294/armeabi-v7a image_magick_ffi}
[        ] ninja: Entering directory `/home/haidar/dev_haidar/flutter/image_magick_ffi/android/.cxx/Debug/b5x10294/armeabi-v7a'
[        ] [1/1] Linking C shared library /home/haidar/dev_haidar/flutter/magick_app/build/image_magick_ffi/intermediates/cxx/Debug/b5x10294/obj/armeabi-v7a/libimage_magick_ffi.so
[        ] FAILED: /home/haidar/dev_haidar/flutter/magick_app/build/image_magick_ffi/intermediates/cxx/Debug/b5x10294/obj/armeabi-v7a/libimage_magick_ffi.so 
[   +1 ms] : && /home/haidar/Android/Sdk/ndk/21.1.6352462/toolchains/llvm/prebuilt/linux-x86_64/bin/clang --target=armv7-none-linux-androideabi16 --gcc-toolchain=/home/haidar/Android/Sdk/ndk/21.1.6352462/toolchains/llvm/prebuilt/linux-x86_64 --sysroot=/home/haidar/Android/Sdk/ndk/21.1.6352462/toolchains/llvm/prebuilt/linux-x86_64/sysroot -fPIC -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -D_FORTIFY_SOURCE=2 -march=armv7-a -mthumb -Wformat -Werror=format-security  -O0 -fno-limit-debug-info  -Wl,--exclude-libs,libgcc.a -Wl,--exclude-libs,libgcc_real.a -Wl,--exclude-libs,libatomic.a -static-libstdc++ -Wl,--build-id -Wl,--fatal-warnings -Wl,--exclude-libs,libunwind.a -Wl,--no-undefined -Qunused-arguments -shared -Wl,-soname,libimage_magick_ffi.so -o /home/haidar/dev_haidar/flutter/magick_app/build/image_magick_ffi/intermediates/cxx/Debug/b5x10294/obj/armeabi-v7a/libimage_magick_ffi.so CMakeFiles/image_magick_ffi.dir/image_magick_ffi.c.o -L/home/haidar/dev_haidar/flutter/image_magick_ffi/src/Dependencies/ImageMagick/lib/arm64-v8a /home/haidar/dev_haidar/flutter/image_magick_ffi/src/Dependencies/ImageMagick/lib/arm64-v8a/libmagickcore-7.so  /home/haidar/dev_haidar/flutter/image_magick_ffi/src/Dependencies/ImageMagick/lib/arm64-v8a/libmagickwand-7.so  /home/haidar/dev_haidar/flutter/image_magick_ffi/src/Dependencies/ImageMagick/lib/arm64-v8a/libomp.so  -latomic -lm && :
[        ] /home/haidar/Android/Sdk/ndk/21.1.6352462/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin/ld: error: /home/haidar/dev_haidar/flutter/image_magick_ffi/src/Dependencies/ImageMagick/lib/arm64-v8a/libmagickcore-7.so: incompatible target
[        ] /home/haidar/Android/Sdk/ndk/21.1.6352462/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin/ld: error: /home/haidar/dev_haidar/flutter/image_magick_ffi/src/Dependencies/ImageMagick/lib/arm64-v8a/libmagickwand-7.so: incompatible target
[        ] /home/haidar/Android/Sdk/ndk/21.1.6352462/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin/ld: error: /home/haidar/dev_haidar/flutter/image_magick_ffi/src/Dependencies/ImageMagick/lib/arm64-v8a/libomp.so: incompatible target
[        ] /home/haidar/dev_haidar/flutter/image_magick_ffi/src/image_magick_ffi.c:7: error: undefined reference to 'MagickGetException'
[        ] /home/haidar/dev_haidar/flutter/image_magick_ffi/src/image_magick_ffi.c:16: error: undefined reference to 'MagickWandGenesis'
[        ] /home/haidar/dev_haidar/flutter/image_magick_ffi/src/image_magick_ffi.c:27: error: undefined reference to 'NewMagickWand'
[        ] /home/haidar/dev_haidar/flutter/image_magick_ffi/src/image_magick_ffi.c:32: error: undefined reference to 'MagickReadImage'
[        ] /home/haidar/dev_haidar/flutter/image_magick_ffi/src/image_magick_ffi.c:46: error: undefined reference to 'MagickResizeImage'
[        ] /home/haidar/dev_haidar/flutter/image_magick_ffi/src/image_magick_ffi.c:53: error: undefined reference to 'MagickSetImageCompressionQuality'
[        ] /home/haidar/dev_haidar/flutter/image_magick_ffi/src/image_magick_ffi.c:60: error: undefined reference to 'MagickWriteImage'
[        ] /home/haidar/dev_haidar/flutter/image_magick_ffi/src/image_magick_ffi.c:67: error: undefined reference to 'DestroyMagickWand'
[        ] /home/haidar/dev_haidar/flutter/image_magick_ffi/src/image_magick_ffi.c:70: error: undefined reference to 'MagickWandTerminus'
[        ] clang: error: linker command failed with exit code 1 (use -v to see invocation)
[        ] ninja: build stopped: subcommand failed.
[        ] 	at com.android.build.gradle.internal.cxx.process.ProcessOutputJunction.execute(ProcessOutputJunction.kt:126)
[        ] 	at com.android.build.gradle.internal.cxx.process.ProcessOutputJunction.execute(ProcessOutputJunction.kt:149)
[        ] 	at com.android.build.gradle.internal.cxx.build.CxxRegularBuilder$executeProcessBatch$1.invoke(CxxRegularBuilder.kt:378)
[        ] 	at com.android.build.gradle.internal.cxx.build.CxxRegularBuilder$executeProcessBatch$1.invoke(CxxRegularBuilder.kt:368)
[        ] 	at com.android.build.gradle.internal.cxx.caching.CxxBuildCache.cacheBuild(CxxBuildCache.kt:46)
[        ] 	at com.android.build.gradle.internal.cxx.build.CxxRegularBuilder.executeProcessBatch(CxxRegularBuilder.kt:368)
[        ] 	at com.android.build.gradle.internal.cxx.build.CxxRegularBuilder.build(CxxRegularBuilder.kt:153)
[        ] 	at com.android.build.gradle.tasks.ExternalNativeBuildTask$doTaskAction$$inlined$recordTaskAction$1.invoke(BaseTask.kt:70)
[        ] 	at com.android.build.gradle.internal.tasks.Blocks.recordSpan(Blocks.java:51)
[        ] 	at com.android.build.gradle.tasks.ExternalNativeBuildTask.doTaskAction(ExternalNativeBuildTask.kt:137)
[        ] 	at com.android.build.gradle.internal.tasks.UnsafeOutputsTask$taskAction$$inlined$recordTaskAction$1.invoke(BaseTask.kt:65)
[        ] 	at com.android.build.gradle.internal.tasks.Blocks.recordSpan(Blocks.java:51)
[        ] 	at com.android.build.gradle.internal.tasks.UnsafeOutputsTask.taskAction(UnsafeOutputsTask.kt:62)
[        ] 	at jdk.internal.reflect.GeneratedMethodAccessor1564.invoke(Unknown Source)
[        ] 	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[        ] 	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
[        ] 	at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:104)
[        ] 	... 152 more
[        ] * Get more help at https://help.gradle.org
[        ] BUILD FAILED in 8s

I think my phone is armeabi-v7a] which is not supported as you mention on your README. My question is how can I generate the correct .so files as you did for arm64-v8a??? I can't find documentation on that, please guide me to the right path.

Missing some class definitions

Hey, I'm trying to integrate this with my app, I'm reusing the code from the example-app and converting it to Kotlin. I'm very confused though about this ShareActivity that appears on the ProcessImageTask constructor. I see that you're passing the MainActivity context to it, but I don't see where this ShareActivity is being defined. Also, I don't see the definition for the FileUtils and IOUtils.

https://github.com/cherryleafroad/Android-ImageMagick7/blob/2c6d3f363446d1898b65d73ead48e66d6998a39c/example-app/android/app/src/main/java/com/example/project/MainActivity.java#L112

https://github.com/cherryleafroad/Android-ImageMagick7/blob/2c6d3f363446d1898b65d73ead48e66d6998a39c/example-app/android/app/src/main/java/com/example/project/MainActivity.java#L68

Rewrite jmagick library

It's outdated, old, and buggy. Also, the API isn't very modern anymore, and doesn't fit well with imagemagick features.

Permission denied for targetSdkVersion > 28

Hello. First of all very appreciate about your work. This project is really helpful.

But while implemented it I faced an issue with running library on target versions that are higher than SDK 28. Maybe you have some suggestions regarding it.

It looks like after 28 version the permission rules become more strict and deny to run libraries directly.

If i want to convert image I constantly got an exception like:
java.io.IOException: Cannot run program "/data/user/0/com.example.project/files/usr/bin/arm64-v8a/convert": error=13, Permission denied

Any ideas of how it can be fixed for latest versions? Reproduced only with compileSdkVersion & targetSdkVersion higher than 28

Still no Implementation

Hi,

at first - Thx a lot for your work ...
I do not have experience with NDK and i need the Lib only for one operation in my app ( bevel)

But im Sorry , maybe i'm stupid - i followed all instructions with the finished zip from here
#4 (comment)

i still get no Unsatisfied Link error. Can you pls help me ??

What i have done

a) create a blank project ( androidx , AS 4.1.1)
b) copied the whole Source, created a (blank) Jni folder,
c) created a libs/arm64-v8a and copied all files from zip above into it
d) compile project ( with NO changes of init part in your Mainactivity )
f) added Write permission

When i start the project , the lib will loaded ( System.loadLibrary("jmagick-7");

But the next point fails

java.lang.UnsatisfiedLinkError: No implementation found for void com.wdtec.testapp.magick.Magick.setAppConfigDataDir(java.lang.String) (tried Java_com_wdtec_testapp_magick_Magick_setAppConfigDataDir and Java_com_wdtec_testapp_magick_Magick_setAppConfigDataDir__Ljava_lang_String_2)

Any cool tip as christmas gift for me ? :-)

Thank u very much

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.