質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Windows Server

Windows Serverとは、Microsoft社のサーバ用オペレーティングシステムの総称です。 企業内ネットワークなどで利用されるサーバ機へ導入することを想定して開発されているため高い安定性があり、 管理機能を提供するソフトウェアが多く含まれています。

Android Emulator

Android EmulatorはアンドロイドのOSで起動しているアンドロイドのデバイスの機能をシミュレートするソフトウェアです。Emulatorは開発者に複数の違う設定を持ったデバイスを必要とすることなくアプリケーションを開発しテストすることが可能になります。

Q&A

解決済

1回答

4673閲覧

【Kotlin】AndroidタブレットからWindows共有ファイルにアクセスしたい【jcifs-ng】

kakukaku123

総合スコア9

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Windows Server

Windows Serverとは、Microsoft社のサーバ用オペレーティングシステムの総称です。 企業内ネットワークなどで利用されるサーバ機へ導入することを想定して開発されているため高い安定性があり、 管理機能を提供するソフトウェアが多く含まれています。

Android Emulator

Android EmulatorはアンドロイドのOSで起動しているアンドロイドのデバイスの機能をシミュレートするソフトウェアです。Emulatorは開発者に複数の違う設定を持ったデバイスを必要とすることなくアプリケーションを開発しテストすることが可能になります。

0グッド

0クリップ

投稿2021/05/21 08:42

編集2021/05/23 23:34

前提・実現したいこと

KotlinにてAndroidからWindowsの共有ファイルにアクセスするアプリを開発しております。
jcifs-ngを使用して、アクセスを試みていますが、ファイル有無確認の処理の段階で異常終了してしまいます。
エラー原因などわかる方がいましたら、ご教示いただけますでしょうか。

このサイトを参考にしています。

発生している問題・エラーメッセージ

05-21 08:10:51.533 4437-4462/xxxxx D/ServerFileAccess: サーバーIP or サーバー名 05-21 08:10:51.533 4437-4462/xxxxx D/ServerFileAccess: 共有名 05-21 08:10:51.533 4437-4462/xxxxx D/ServerFileAccess: ファイル名 05-21 08:10:51.580 4437-4462/xxxxx D/ServerFileAccess: finally 05-21 08:10:51.648 4437-4462/xxxxx E/AndroidRuntime: FATAL EXCEPTION: DefaultDispatcher-worker-1 Process: xxxxx , PID: 4437 java.lang.IllegalAccessError: Illegal class access: 'jcifs.spnego.NegTokenInit' attempting to access 'org.bouncycastle.asn1.DEROutputStream' (declaration of 'jcifs.spnego.NegTokenInit' appears in /data/app/xxxxx -1/base.apk) at jcifs.spnego.NegTokenInit.toByteArray(NegTokenInit.java:158) at jcifs.smb.SpnegoContext.initSecContext(SpnegoContext.java:207) at jcifs.smb.SmbSessionImpl.createToken(SmbSessionImpl.java:665) at jcifs.smb.SmbSessionImpl.sessionSetupSMB2(SmbSessionImpl.java:538) at jcifs.smb.SmbSessionImpl.sessionSetup(SmbSessionImpl.java:483) at jcifs.smb.SmbSessionImpl.send(SmbSessionImpl.java:369) at jcifs.smb.SmbSessionImpl.send(SmbSessionImpl.java:347) at jcifs.smb.SmbTreeImpl.treeConnect(SmbTreeImpl.java:611) at jcifs.smb.SmbTreeImpl.send(SmbTreeImpl.java:429) at jcifs.smb.SmbTreeImpl.send(SmbTreeImpl.java:405) at jcifs.smb.SmbTransportImpl.getDfsReferrals(SmbTransportImpl.java:1724) at jcifs.smb.DfsImpl.getDcReferrals(DfsImpl.java:192) at jcifs.smb.DfsImpl.getDc(DfsImpl.java:233) at jcifs.smb.DfsImpl.getTrustedDomains(DfsImpl.java:112) at jcifs.smb.DfsImpl.resolve(DfsImpl.java:352) at jcifs.smb.DfsImpl.resolve(DfsImpl.java:326) at jcifs.smb.SmbTreeConnection.connectHost(SmbTreeConnection.java:530) at jcifs.smb.SmbTreeConnection.connectHost(SmbTreeConnection.java:489) at jcifs.smb.SmbTreeConnection.connect(SmbTreeConnection.java:465) at jcifs.smb.SmbTreeConnection.connectWrapException(SmbTreeConnection.java:426) at jcifs.smb.SmbFile.ensureTreeConnected(SmbFile.java:558) at jcifs.smb.SmbFile.exists(SmbFile.java:852) at xxxxx .MainActivity.ServerFileAccess(MainActivity.kt:100) at xxxxx .MainActivity.access$ServerFileAccess(MainActivity.kt:11) at xxxxx .MainActivity$initSetting$1$1.invokeSuspend(MainActivity.kt:39) at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:56) at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:571) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:738) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:678) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:665)

該当のソースコード

Kotlin

1class MainActivity : AppCompatActivity() { 2 // コルーチン関連 3 private val mf_job: kotlinx.coroutines.Job = kotlinx.coroutines.SupervisorJob() 4 private val mf_scope = kotlinx.coroutines.CoroutineScope(kotlinx.coroutines.Dispatchers.Default + this.mf_job) 5 6 override fun onCreate(savedInstanceState: Bundle?) { 7 super.onCreate(savedInstanceState) 8 setContentView(R.layout.activity_main) 9 10 this.initSetting(); 11 } 12 13 // 初期設定 14 private fun initSetting() { 15 // テストボタン 16 this.findViewById<Button>(R.id.button).setOnClickListener() { 17 // 非同期処理 18 this.mf_scope.launch() { 19 ServerFileAccess() 20 } 21 } 22 } 23 24 private fun ServerFileAccess() { 25 //プロパティを準備する 26 var prop: java.util.Properties 27 prop = java.util.Properties() 28 prop.setProperty("jcifs.smb.client.minVersion", "SMB210"); 29 prop.setProperty("jcifs.smb.client.maxVersion", "SMB311"); 30 31 //基本コンテキストを作成する 32 var bc: jcifs.context.BaseContext; 33 bc = jcifs.context.BaseContext(jcifs.config.PropertyConfiguration(prop)) 34 35 // 認証情報を作成する 36 var auth: jcifs.smb.NtlmPasswordAuthenticator 37 auth = jcifs.smb.NtlmPasswordAuthenticator("ドメイン名", "ユーザー名", "パスワード") 38 39 //接続コンテキストを作成する 40 var cifsCon: jcifs.CIFSContext 41 cifsCon = bc.withCredentials(auth) 42 43 // ファイル情報 44 var filePath: String 45 filePath = "smb:\\サーバーIP or サーバー名\共有名\ファイル名" 46 filePath = filePath.replace("\", "/") 47 48 try { 49 var sf: jcifs.smb.SmbFile 50 sf = jcifs.smb.SmbFile(filePath, cifsCon) 51 Log.d("ServerFileAccess", sf.server) 52 Log.d("ServerFileAccess", sf.share) 53 Log.d("ServerFileAccess", sf.name) 54 if(sf.exists()) { // ここでエラー 55 Log.d("ServerFileAccess", "ファイル有") 56 } else { 57 Log.d("ServerFileAccess", "ファイル無") 58 } 59 } catch (ex: Exception) { 60 Log.d("ServerFileAccess", "エラー", ex) // 実行されない 61 } finally { 62 Log.d("ServerFileAccess", "finally") // 実行される 63 } 64 Log.d("ServerFileAccess", "END") // 実行されない 65 } 66}

buildGradle

1 implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" 2 implementation 'androidx.core:core-ktx:1.3.2' 3 implementation 'androidx.appcompat:appcompat:1.2.0' 4 implementation 'com.google.android.material:material:1.2.1' 5 implementation 'androidx.constraintlayout:constraintlayout:2.0.4' 6 implementation files('libs\bcprov-jdk15to18-1.68.jar') 7 implementation files('libs\jcifs-ng-2.1.5.jar') 8 implementation files('libs\slf4j-api-1.7.24.jar')

AndroidManifestXml

1 <uses-permission android:name="android.permission.INTERNET"/> 2 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 3 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> 4 <uses-permission android:name="android.permission.ADD_SYSTEM_SERVICE"/>

試したこと

仮想デバイス特有のエラーかと思い、実機(API:21)でも試しましたが、同様に異常終了しました。
(ネットワーク接続は確認済み)

Nexus 5X API24の仮想デバイスにて、「cxfile explorer」をインストールし、
Windows共有ファイルにアクセス出来るか試したところ、問題なくアクセス出来ました。

上記サイト記載の「smbj」でも試しましたが、SMBClient宣言時に異常終了しました。
(あまり調査せず)

補足情報(FW/ツールのバージョンなど)

各種バージョン
Android Studio:4.1.2
Kotlin:1.3.72
jcifs-ng:2.1.5
仮想デバイスAPI:21,22,24,30
Windows OS:Windows Server 2012(アクセス先)

エラー原因とは関係ありませんが、異常終了する原因

情報が不足していましたら、追記させていただきます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dodox86

2021/05/21 09:46

質問内容への直接の指摘ではありませんが、「処理落ち」とは一般的に、早いサイクルで動いているものに処理が追い付けなくなって、欠落するようなことを言います。今回の件はそうではなく、アプリケーションが異常終了しているのですよね?
kakukaku123

2021/05/23 23:34

ご指摘ありがとうございます。 質問を訂正させていただきました。
guest

回答1

0

自己解決

バージョンの不具合なのか、下記ファイルを置き換えたところ
異常終了することなく、ファイル有と表示されました。
jcifs-ng-2.1.5.jar → jcifs-ng-2.1.6.jar

投稿2021/05/31 04:51

kakukaku123

総合スコア9

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問