簡體   English   中英

無法開始工作.so android項目中的共享庫

[英]Cannot get to work .so shared library in android project

android開發和java絕對是新手,所以問題可能微不足道,但我已經對嘗試或閱讀的內容或google感到困惑,因此請提供幫助。 試圖創建一個應用程序,該應用程序應該對選定的圖像集進行一些批處理。 找到了一個完全適合我需要的 ,將其連接起來並編寫了一個簡單的測試,該程序必須檢查一切是否正常運行:

if (requestCode == SELECT_PICTURE && resultCode == RESULT_OK && null != data) {
        Uri selectedImageUri = data.getData();
        m_ImagePath = getRealPathFromUri(selectedImageUri);

        try {
            m_MagickImage = new MagickImage(new ImageInfo(m_ImagePath));
            m_EffectImage = m_MagickImage.rotateImage(90);
            m_Bitmap = MagickBitmap.ToReducedBitmap(m_EffectImage, 1000);
        } catch (MagickException e) {
            Log.d(LOGTAG, e.toString());
        }

        ImageView imageview = (ImageView) findViewById(R.id.imageView);
        imageview.setImageBitmap(m_Bitmap);
        //imageview.setImageURI(selectedImageUri);

        openFileButton.setVisibility(View.GONE);
    }

項目構建完全正常,沒有警告,但是當我將其部署在真實硬件上並單擊分配給書面測試的按鈕時,在logcat中出現以下錯誤:

JNI DETECTED ERROR IN APPLICATION: GetStringUTFChars received NULL jstring
    in call to GetStringUTFChars
    from void magick.ImageInfo.setFileName(java.lang.String)
    "main" prio=5 tid=1 Runnable

還有200多個系統信息和警告字符串(不要認為它們很重要,但可以按需提供所需的一切)。

而且在那次奔跑之后,我收到了很多紅色警告,例如

cannot resolve corresponding jni function Java_magick_ImageInfo_setFileName

在幾乎所有與Android-Imagemagick相關的Java文件中。

按照我在線程中找到的說明,將庫連接為.jar文件。 這是我的設置:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:25.0.0'
    compile 'com.android.support:design:25.0.0'
    testCompile 'junit:junit:4.12'
}

sourceSets {
        main {
            java.srcDirs = ['src/main/java']
        }
    }

在build.gradle中。

armeabi.jar,在項目根目錄的'libs'目錄中具有.so文件,在'src / main / java'中具有包裝類的'fakeawt'和'magick'文件夾,以及

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

在Main.java的開頭。

任何想法可能出什么問題以及如何正確解決?

我建議您使用的Android Studio是否遵循項目結構:App |-> src |-> jnilibs在此處復制與https://github.com/paulasiimwe/Android-ImageMagick/tree/master/libs相同的所有文件夾並粘貼到jnilibs(libs)中,然后在應用程序build.gradle中添加跟隨行

sourceSets.main {
jniLibs.srcDir 'src/main/libs' // use the jni .so compiled from the manual ndk-build command
jni.srcDirs = [] //disable automatic ndk-build call
}

同步gradle

不要在您的項目中復制jni文件,這是為了您在庫中進行自定義更改。 從設置中設置NDK路徑。

抱歉,該問題與ndk或共享庫無關。 它只是不推薦使用的getRealPathFromUri()函數,與現代android 5+圖像選擇器一起使用時始終返回NULL值。

另外,由於某種原因,將NULL指針傳遞給JNI方法總是會導致段錯誤,因此必須事先驗證這些值。

通過根據答案替換適當的函數並創建if-else語句來檢查返回的真實文件路徑是否為NULL來解決。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM