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

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

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

JAR

JAR(又はJava ARchive)はコンパイルされた複数のJavaバイトコード及び関連ファイルのリソースを一つのファイルに統合したものです。JARファイルはZIPファイルのフォーマットで構築されています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

3907閲覧

[Unity] .jar , ライブラリについて理解できない

Yuki_Unity

総合スコア129

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

JAR

JAR(又はJava ARchive)はコンパイルされた複数のJavaバイトコード及び関連ファイルのリソースを一つのファイルに統合したものです。JARファイルはZIPファイルのフォーマットで構築されています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2017/12/10 05:51

編集2017/12/10 05:56

*この質問は解決法を求めてません
###知りたいこと
こちらの質問ページのベストアンサーに、
「GooglePlayServices.jar」や「the same Library(同じライブラリ)」「DEX」などの単語があったのですが、
「.jar」についてですが、これはなんの拡張子なのでしょうか?
Javaが関係しているのでしょうか?

「同じライブラリ」についてなのですが、そもそもUnity,c#で言う「ライブラリ」とは、「using」で良いのでしょうか?

基礎で理解できてませんが、どなたか教えてください。
お願いします。

おすすめの参考ページがあれば紹介して頂きたいです。
おねがいいたします。

###追記
ちょうど僕は、この問題に直面しています。
検索しますと上のページにたどり着き、そのように書いてあったので質問させていただきました。

2つ以上のプラグインが同じライブラリを参照 とありますが、ここはどこをどのようにどうするのかわかりません。

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

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

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

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

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

guest

回答1

0

ベストアンサー

まず、以下はリンク先のベストアンサーをGoogle先生で翻訳したものです。
割とそのまま説明されています。

まず、一般的な知識のために、DEXはコードファイル(コードであれ、ライブラリで提供されているコードであれ)をDEX形式(Dalvik Executable)に変換するプロセスです。

ライブラリは開発中の利便性のためにのみ使用されます。ゲームを構築するとき、ライブラリの概念はもうありません。すべてがコンパイルされたコードです。このため、2つ以上のプラグインが同じライブラリ(参照先のJARを2つ含む)を参照するか、同じ名前のクラスを定義すると競合が発生し、このエラーが発生します。
たとえば、Unityプロジェクトで2つのプラグインを使用していて、両方にGooglePlayServices.jarのコピーが含まれている場合、DEXは同じクラスの複数のコピーを処理しようとするため、ゲームを構築できません。
あなたのケースでは、これが事実であるか(同じ瓶の複数のコピー)、または同じクラスの複数のコピーかどうかは明確ではありません。
最初のものは見つけやすい(同じJARの複数のコピーを探す)。 2番目の方法は手間がかかりますが、これ以上の情報を提供しても問題ありません(Unityコンソールに余分な情報がある場合など).DEXツールは、失敗の原因となるクラスの名前を提供する必要があります。
注:場合によっては、ビルドが失敗する理由を調べるのが難しくなります。他のすべてが失敗した場合は、Android関連のビルドの問題を解決するために私の助けを借ります(マニフェストのマージ、プラグインの競合などによる)。あなたの問題を解決できない場合は、それをチェックしてください!

**「.jar」**とは検索すると分かりますが、Javaプロジェクトを1ファイルに固めた圧縮ファイルの拡張子です。
UnityではAndroidのプラグインは複数または1つのjar形式(+付随するテキストファイル等)でインポートされます。

**「ライブラリ」**とは「汎用性の高い複数のプログラムを再利用可能な形でひとまとまりにしたもの」です(By Wikipedia)。
Unity C#のライブラリは「usingで取り込むもの」で合っていますが、Androidの場合は「Pluginsフォルダに入れたjarファイルの中で汎用的なもの」と思ってください。

後は上記回答にある通りです。
重複しているライブラリの内、片方を削除してください。


何故こうなるかを補足説明すると、Androidのプラグインは大抵このライブラリを含んだ状態で配布されています。

  • プラグインA「ウチはGooglePlayServiceライブラリを使うから、GooglePlayService.jarを含んで配布するわ。

これでプラグインをインポートするだけで(ライブラリを別途インポートしなくても)動くね!」

  • プラグインB「ウチはGooglePlayServiceライブラリを使うから、GooglePlayService.jarを含んで配布するわ。

これで(略)」

  • DEX「GooglePlayService.jarが2つ?!どっち使えばいいんだよ!」→エラー

……これが「単体では動くが2つ以上入れるとライブラリが重複してエラーになる」原因です。

全く同じ名前であれば片方を消せばいいのですが、「ファイル名が微妙に違う」「バージョン差があり、新しい方を有効にしないと片方動いて片方動かない」「複数のライブラリをまとめて1ファイルにされている(回答内の「同じクラスの複数のコピー」に当たる)」などの罠が多いです。
頑張って対応してください。

投稿2017/12/10 09:54

編集2017/12/10 11:26
sakura_hana

総合スコア11427

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

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

Yuki_Unity

2017/12/10 11:33

ここまで細かく回答ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問