Android Studio中的System.loadLibrary

时间:2015-01-27 14:40:06

标签: android gradle android-studio abbyy

我目前正在尝试在我的项目中加载一个库,我需要检查我正在使用的某个许可证。但是,执行它时只会在system.loadLibrary上出错。

我正在使用Android Studio,并且我已将库放在我的libs文件夹中,并且已将其添加到我的依赖项中。

代码:

@Override
public void onCreate() {
    Log.v( TAG, "onCreate()" );
    super.onCreate();

    //Gives the error.
    System.loadLibrary( "MobileImagingEngine" );
    try {
        Log.v( TAG, "MILicenser.getVersionInfo(): " + MILicenser.getVersionInfo() );
        final InputStream licenseStream = getAssets().open( "thelicense.License" );
        MILicenser.setLicense( licenseStream, "Android_ID" );
        Log.v( TAG, "MILicenser.setLicense() succeeded. " + MILicenser.getLicenseInfo() );
    } catch( final Exception exception ) {
        Log.e( TAG, "MILicenser.setLicense() failed", exception );
    }
    MIContext.createInstance();
}

记录:

Process: docspro.nl.docsproscanapp, PID: 10348
java.lang.UnsatisfiedLinkError: Couldn't load MobileImagingEngine from loader dalvik.system.PathClassLoader[dexPath=/data/app/docspro.nl.docsproscanapp-8.apk,libraryPath=/data/app-lib/docspro.nl.docsproscanapp-8]: findLibrary returned null
        at java.lang.Runtime.loadLibrary(Runtime.java:358)
        at java.lang.System.loadLibrary(System.java:526)
        at docspro.nl.docsproscanapp.MIApplication.onCreate(MIApplication.java:24)
        at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1025)
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4581)
        at android.app.ActivityThread.access$1600(ActivityThread.java:161)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1325)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:157)
        at android.app.ActivityThread.main(ActivityThread.java:5356)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
        at dalvik.system.NativeStart.main(Native Method)

Gradle文件(从堆栈中尝试解决方案):

apply plugin: 'com.android.application'

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.2"

defaultConfig {
    applicationId "project.name"
    minSdkVersion 14
    targetSdkVersion 21
    versionCode 1
    versionName "1.0"
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:21.0.3'
    compile files('lib/armeabi-v7a/libMobileImagingEngine.jar')
    compile files('libs/ksoap2-android-assembly-3.3.0-jar-with-dependencies.jar')
    compile files('libs/MobileImagingEngine.jar')
    compile files('libs/MobileImagingEngine_Doc.jar')
}

task copyNativeLibs(type: Copy) {
    from(new File('libs')) { include '**' }
    into new File(buildDir, 'native-libs')
}

tasks.withType(JavaCompile) { compileTask -> compileTask.dependsOn copyNativeLibs }

clean.dependsOn 'cleanCopyNativeLibs'

tasks.withType(com.android.build.gradle.tasks.PackageApplication) { pkgTask ->
    pkgTask.jniFolders = new HashSet<File>()
    pkgTask.jniFolders.add(new File(buildDir, 'native-libs'))
}

3 个答案:

答案 0 :(得分:1)

几天前就遇到了这个问题。只需要添加一个名为&#34; jniLibs&#34;的文件夹。在我的应用程序文件夹和Android Studio托管其余部分。

有关使用本机库的更多信息 http://ph0b.com/android-studio-gradle-and-ndk-integration/

答案 1 :(得分:0)

项目结构 - &gt; Facet,在结构选项卡中,有一行&#34; Native libs目录&#34;。我想你应该改变它。

答案 2 :(得分:-1)

我注意到您在依赖项中指定了以下路径:&#39; lib / armeabi-v7a / libMobileImagingEngine.jar&#39;
在MI SDK发行版中,libMobileImagingEngine.so位于Android / Lib / armeabi-v7a文件夹中,而不是libMobileImagingEngine.jar。

请仔细检查是否在应用程序中正确指定了所有路径。

如果没用,请发送给我们SDK_Support@abbyy.com以下信息以便进一步调查:

1。完整的项目,我们可以检查我们方面的所有设置。
2。请指明问题是出现在真实设备还是模拟器上?
3。另请注明Android版本和MI SDK版本的数量。