1

私のアプリは、カメラでバーコードをスキャンすることになっています。ユーザーが TC55 Motorola デバイスを持っている場合、組み込みのスキャナーが使用されます。それが機能するためには、build.gradle ファイルで次のように指定する必要があります。

dependencies {
provided files('libs/com.symbol.emdk.jar')

ただし、TC55 以外のデバイスでこの行を使用して apk を実行すると、アプリがクラッシュします。TC55 デバイスと非 TC55 デバイスの両方で動作する単一のフレーバー ビルドを作成するにはどうすればよいですか?

編集1:

AndroidRuntime: FATAL EXCEPTION: main
Process: company.mobile.application.app, PID: 28701
java.lang.RuntimeException: Unable to instantiate activity     ComponentInfo{company.mobile.application.app/com.company.mobile.application.ui.Pr    oductionActivity}: java.lang.ClassNotFoundException: Didn't find class     "com.company.mobile.application.ui.ProductionActivity" on path: DexPathList[[zip     file "/data/app/company.mobile.application.app-3.apk"],nativeLibraryDirectories=    [/data/app-lib/company.mobile.application.app-3, /vendor/lib, /system/lib]]
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2231)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2363)
at android.app.ActivityThread.access$900(ActivityThread.java:161)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1265)
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)
Caused by: java.lang.ClassNotFoundException: Didn't find class     "com.company.mobile.application.ui.ProductionActivity" on path: DexPathList[[zip     file "/data/app/company.mobile.application.app-3.apk"],nativeLibraryDirectories=    [/data/app-lib/company.mobile.application.app-3, /vendor/lib, /system/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:67)
at java.lang.ClassLoader.loadClass(ClassLoader.java:497)
at java.lang.ClassLoader.loadClass(ClassLoader.java:457)
at android.app.Instrumentation.newActivity(Instrumentation.java:1079)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2222)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2363) 
at android.app.ActivityThread.access$900(ActivityThread.java:161) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1265) 
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) 
4

1 に答える 1

3

TC55 で Zebra の EMDK を使用するには、TC55 などの Zebra デバイスでのみ使用できる EMDK ライブラリを使用する必要があります。
そのため、EMDK インターフェイス (EMDKListener、DataListener、または StatusListener) のいずれかを実装するアクティビティを開こうとすると、EMDK が利用できない場合にアプリケーションがクラッシュします。

したがって、AndroidManifest.xmlデバイスで EMDK ライブラリが利用できない可能性があると考える必要があります。

<uses-library android:name="com.symbol.emdk" android:required="false" />

重要な点は、メイン アクティビティに EMDK のリスナーの 1 つを実装しないことです。そうしないと、Zebra 以外のデバイスで実行したときにアプリがクラッシュします (必要な EMDK ライブラリが不足しています)。

2 番目のアクティビティ (EMDK リスナーに基づく) を使用可能にする前に、EMDK が使用可能かどうかを確認するこのサンプル アプリケーションを確認できます。

于 2016-02-15T13:19:55.063 に答える