実現したいこと
Androidアプリでminioのサーバにファイルをアップロードしたい.
前提
AWSのライブラリを使用するのが正しいのかminioのライブラリを使用するのが正しいのかがわからないので両方トライしています.
この質問はAWSのライブラリを使用する方の質問です.
AWS-SDKを使用するパターン
https://docs.aws.amazon.com/ja_jp/sdk-for-java/v1/developer-guide/basics.html
発生している問題・エラーメッセージ
E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.post_awss3, PID: 5114 java.lang.NoClassDefFoundError: Failed resolution of: Ljavax/management/MBeanServerFactory; at com.amazonaws.jmx.MBeans.getMBeanServer(MBeans.java:111) at com.amazonaws.jmx.MBeans.registerMBean(MBeans.java:50) at com.amazonaws.jmx.SdkMBeanRegistrySupport.registerMetricAdminMBean(SdkMBeanRegistrySupport.java:27) at com.amazonaws.metrics.AwsSdkMetrics.registerMetricAdminMBean(AwsSdkMetrics.java:398) at com.amazonaws.metrics.AwsSdkMetrics.<clinit>(AwsSdkMetrics.java:359) at com.amazonaws.metrics.AwsSdkMetrics.addAll(AwsSdkMetrics.java:662) ......
該当のソースコード
kotlin
1import com.amazonaws.ClientConfiguration 2import com.amazonaws.auth.AWSStaticCredentialsProvider 3import com.amazonaws.auth.BasicAWSCredentials 4import com.amazonaws.client.builder.AwsClientBuilder 5import com.amazonaws.services.s3.AmazonS3 6import com.amazonaws.services.s3.AmazonS3ClientBuilder 7import com.amazonaws.services.s3.model.ObjectMetadata 8import com.amazonaws.services.s3.model.PutObjectRequest 9import java.io.File 10import java.io.FileInputStream 11 12class AmazonS3Client { 13 val accessKey = "アクセスキー" 14 val secretKey = "シークレットキー" 15 val credentials = BasicAWSCredentials(accessKey, secretKey) 16 val bucketName = "minioのバケットの名前" 17 val endpoint = "エンドポイント" 18 val clientConfiguration = ClientConfiguration() 19 20 private val s3Client: AmazonS3 = AmazonS3ClientBuilder.standard() 21 .withCredentials(AWSStaticCredentialsProvider(credentials)) 22 .withClientConfiguration(clientConfiguration) 23 .withEndpointConfiguration(AwsClientBuilder.EndpointConfiguration(endpoint, "us-south")) 24 .enablePathStyleAccess() 25 .build() 26 fun uploadCSV(filePass: String): String { 27 val objectMetadata = ObjectMetadata() 28 objectMetadata.contentType = "text/csv" 29 val file = File(filePass) 30 31 val putObjectRequest = PutObjectRequest(bucketName, file.name, FileInputStream(file), objectMetadata) 32 s3Client.putObject(putObjectRequest) 33 34 return s3Client.getUrl(bucketName, file.name).toString() 35 } 36}
gradle
1plugins { 2 id 'com.android.application' 3 id 'kotlin-android' 4 id 'kotlin-kapt' 5} 6 7android { 8 namespace 'com.example.post_awss3' 9 compileSdk 33 10 11 defaultConfig { 12 applicationId "com.example.post_awss3" 13 minSdk 31 14 targetSdk 33 15 versionCode 1 16 versionName "1.0" 17 18 testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" 19 } 20 21 buildTypes { 22 release { 23 minifyEnabled false 24 proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' 25 } 26 } 27 compileOptions { 28 sourceCompatibility JavaVersion.VERSION_1_8 29 targetCompatibility JavaVersion.VERSION_1_8 30 } 31 kotlinOptions { 32 jvmTarget = '1.8' 33 } 34 packagingOptions { 35 exclude 'mime.types' 36 exclude 'META-INF/DEPENDENCIES' 37 } 38} 39 40dependencies { 41 42 implementation 'androidx.core:core-ktx:1.9.0' 43 implementation 'androidx.appcompat:appcompat:1.6.0' 44 implementation 'com.google.android.material:material:1.8.0' 45 implementation 'androidx.constraintlayout:constraintlayout:2.1.4' 46 testImplementation 'junit:junit:4.13.2' 47 androidTestImplementation 'androidx.test.ext:junit:1.1.5' 48 androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1' 49 implementation platform('com.amazonaws:aws-java-sdk-bom:1.11.1000') 50 implementation 'com.amazonaws:aws-java-sdk-s3' 51 implementation 'com.ibm.cos:ibm-cos-java-sdk-s3:2.6.1' 52 implementation 'com.ibm.cos:ibm-cos-java-sdk-core:2.6.1' 53 54}
試したこと
まず,以下の記事を参考にbm-cos-java-sdk-s3:2.6.1とibm-cos-java-sdk-core:2.6.1をdependenciesに追加しました.
https://github.com/IBM/ibm-cos-sdk-java/issues/30
次にMBeanServerFactoryそのものをdependenciesに追加しました.
https://jar-download.com/artifacts/mx4j/mx4j-jmx/3.0.1/source-code/javax/management/MBeanServerFactory.java
↓実際に追加したライブラリ
implementation group: 'mx4j', name: 'mx4j-jmx', version: '3.0.1'
しかしこれは以下のエラーを出します.
E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.post_awss3, PID: 7662 java.lang.NoClassDefFoundError: Failed resolution of: Lmx4j/log/Log; at javax.management.MBeanServerFactory.getLogger(MBeanServerFactory.java:34) at javax.management.MBeanServerFactory.findMBeanServer(MBeanServerFactory.java:105) at com.amazonaws.jmx.MBeans.getMBeanServer(MBeans.java:111) at com.amazonaws.jmx.MBeans.registerMBean(MBeans.java:50) at com.amazonaws.jmx.SdkMBeanRegistrySupport.registerMetricAdminMBean(SdkMBeanRegistrySupport.java:27) at ....
次にmx4jを追加してみました.
https://mvnrepository.com/artifact/mx4j/mx4j/3.0.2
これは最新versionの3.0.2もmx4j-jmxと同じ3.0.1も同じエラーを出しました.
これはおそらく競合のエラーです.
* What went wrong: Execution failed for task ':app:checkDebugDuplicateClasses'. > A failure occurred while executing com.android.build.gradle.internal.tasks.CheckDuplicatesRunnable > Duplicate class javax.management.AndQueryExp found in modules mx4j-3.0.2 (mx4j:mx4j:3.0.2) and mx4j-jmx-3.0.1 (mx4j:mx4j-jmx:3.0.1) Duplicate class javax.management.Attribute found in modules mx4j-3.0.2 (mx4j:mx4j:3.0.2) and mx4j-jmx-3.0.1 (mx4j:mx4j-jmx:3.0.1) Duplicate class javax.management.AttributeChangeNotification found in modules mx4j-3.0.2 (mx4j:mx4j:3.0.2) and mx4j-jmx-3.0.1 (mx4j:mx4j-jmx:3.0.1) ....
補足情報(FW/ツールのバージョンなど)
Android Studio Electric Eel | 2022.1.1 Patch 1

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。