2016-11-15 13 views
0

アンドロイド開発とJavaには全く新しいので、問題は簡単かもしれませんが、私はすでに何を試してみるか、読んだり、グーグルについて混乱しています。選択したイメージセットでバッチ処理を行うアプリケーションを作成しようとしています。発見完璧に私のニーズに合わせlibraryは、それを接続し、すべてが動作するかどうか、それが必要としてチェックアウトしていた簡単なテストを、書いた:アンドロイドプロジェクトの.so共有ライブラリを取得することができません

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); 
    } 

プロジェクトは、警告なしに完全に罰金構築しますが、私はそれを展開したとき(彼らは重要ですが、オンデマンドで必要なすべてを提供することができないと思います)、システム情報や警告の

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の文字列より:実際のハードウェアと筆記試験に割り当てられたボタンをクリックし、私はlogcatで、次のエラーを得ました。

はまた、その実行後、私は、Android-のImageMagickに関連するほぼすべてのJavaファイルで

cannot resolve corresponding jni function Java_magick_ImageInfo_setFileName 

ような赤い警告の多くを得ました。

ライブラリーは、thisスレッドに記載されている手順に従って、.jarファイルとして接続されました。ここに私の設定です:build.gradleで

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'] 
     } 
    } 

「SRC /メイン/ Javaのラッパークラスを持つプロジェクト、 'fakeawt' と「魔術のフォルダのルートに 'LIBS' ディレクトリ内の.soファイルとarmeabi.jar、とAT

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

Main.javaの先頭。

何が問題になる可能性があり、正しく修正する方法はありますか?あなたは、プロジェクト構造に従うのAndroid Studioを使用している場合

答えて

0

申し訳ありません、この問題はndkまたは共有ライブラリには関係ありませんでした。現代のアンドロイド5+画像チューザーで使用すると、常にNULL値を返すgetRealPathFromUri()関数が廃止されました。

また、JNIメソッドへのNULLポインタを渡すと何らかの理由でsegfaultが発生するため、これらの値を事前に検証する必要があります。

適切な関数をthisに置き換えて解決し、返された実際のファイルパスがNULLでないかどうかを確認するif-elseステートメントを作成します。

0

は、私がお勧め: のApp | - > SRCを | - フォローラインを追加し よりも、ここに> jnilibs jnilibs(LIBS)へhttps://github.com/paulasiimwe/Android-ImageMagick/tree/master/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ファイルをコピーしていない、それは臭化リチウムでカスタムの変更のためでありますary。 設定からNDKパスを設定します。

関連する問題