System.loadLibrary 在 Android 工作室
System.loadLibrary in Android Studio
我目前正在尝试在我的项目中加载一个库,我需要检查我正在使用的特定许可证。然而,当执行它时,它只会在 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.access00(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'))
}
Project Structure->Facet,在结构选项卡中,有一行"Native libs directory"。我认为你应该改变它。
我注意到您在依赖项中指定了以下路径:'lib/armeabi-v7a/libMobileImagingEngine.jar'
在 MI SDK 分发版中,libMobileImagingEngine.so 位于 Android/Lib/armeabi-v7a 文件夹中,而不是 libMobileImagingEngine.jar。
请仔细检查应用程序中是否正确指定了所有路径。
如果没有帮助,请将以下信息发送至 SDK_Support@abbyy.com 以供进一步调查:
1。完整的项目,以便我们可以检查我们这边的所有设置。
2。请说明问题是出现在真机上还是模拟器上?
3。另请注明 Android 版本和 MI SDK build 数量。
几天前被困在这个问题上。只需在我的应用程序文件夹中添加一个名为 "jniLibs" 的文件夹,其余的由 Android Studio 负责。
有关使用本机库的更多信息
http://ph0b.com/android-studio-gradle-and-ndk-integration/
我目前正在尝试在我的项目中加载一个库,我需要检查我正在使用的特定许可证。然而,当执行它时,它只会在 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.access00(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'))
}
Project Structure->Facet,在结构选项卡中,有一行"Native libs directory"。我认为你应该改变它。
我注意到您在依赖项中指定了以下路径:'lib/armeabi-v7a/libMobileImagingEngine.jar'
在 MI SDK 分发版中,libMobileImagingEngine.so 位于 Android/Lib/armeabi-v7a 文件夹中,而不是 libMobileImagingEngine.jar。
请仔细检查应用程序中是否正确指定了所有路径。
如果没有帮助,请将以下信息发送至 SDK_Support@abbyy.com 以供进一步调查:
1。完整的项目,以便我们可以检查我们这边的所有设置。
2。请说明问题是出现在真机上还是模拟器上?
3。另请注明 Android 版本和 MI SDK build 数量。
几天前被困在这个问题上。只需在我的应用程序文件夹中添加一个名为 "jniLibs" 的文件夹,其余的由 Android Studio 负责。
有关使用本机库的更多信息 http://ph0b.com/android-studio-gradle-and-ndk-integration/