おっと! でました!

どこかで読んだよ! そんな話!
ダイアログのボタンから遷移しますダウンロードページ.

そのまま言われるがままに流れて, AndroidStudio 起動OK, と.
デザインとかもあるけどまずはでとりあえず.

SDKをAPI21に更新.


...
android {
compileSdkVersion 21
buildToolsVersion "21.0.0"
defaultConfig {
...
targetSdkVersion 21
...
}
...
NDKをr10cに更新.

ndk~$ chmod a+x android-ndk-r10c-darwin-x86_64.bin ndk~$ ./android-ndk-r10c-darwin-x86_64.bin ... Extracting android-ndk-r10c/build/gmsl Extracting android-ndk-r10c/build/core Extracting android-ndk-r10c/build/awk Extracting android-ndk-r10c/build Extracting android-ndk-r10c ndk~$ export PATH=$PATH:~/android-ndk-r10c
Android NDK | Android Developers
とりあえずこれくらいで.
Android 5.0 Lollipop の SDK と、新しい Nexus プレビュー版イメージを公開しました - Google Developer Japan Blog
MacOSのアップデートの後, AndroidStudio にてこんなダイアログ.

Can't start Git: /usr/bin/git
Probably the path to Git executable is not valid.
見えてない?
$ which git
/usr/bin/git
権限?
$ brew doctor
Agreeing to the Xcode/iOS license requires admin privileges, please re-run as root via sudo.
Please note that these warnings are just used to help the Homebrew maintainers
with debugging if you file an issue. If everything you use Homebrew for is
working fine: please don't worry and just ignore them. Thanks!
Warning: You have an outdated version of /usr/bin/install_name_tool installed.
This will cause binary package installations to fail.
This can happen if you install osx-gcc-installer or RailsInstaller.
To restore it, you must reinstall OS X or restore the binary from
the OS packages.
Warning: Git could not be found in your PATH.
Homebrew uses Git for several internal functions, and some formulae use Git
checkouts instead of stable tarballs. You may want to install Git:
brew install git
Agreeing to the Xcode/iOS license requires admin privileges, please re-run as root via sudo.
Warning: You have not agreed to the Xcode license.
Builds will fail! Agree to the license by opening Xcode.app or running:
xcodebuild -license
Warning: Some keg-only formula are linked into the Cellar.
Linking a keg-only formula, such as gettext, into the cellar with
`brew link <formula>` will cause other formulae to detect them during
the `./configure` step. This may cause problems when compiling those
other formulae.
Binaries provided by keg-only formulae may override system binaries
git は入っているので, おもむろに
$ sudo xcodebuild -license
...
9.12 Entire Agreement; Governing Language
This Agreement constitutes the entire agreement between the parties with respect to the use of the SDK licensed hereunder and supersedes all prior understandings regarding such subject matter. This Agreement may be modified only: (a) by a written amendment signed by both parties, or (b) to the extent expressly permitted by this Agreement (for example, by Apple by written or email notice to You). Any translation of this Agreement is done for local requirements and in the event of a dispute between the English and any non-English version, the English version of this Agreement shall govern. If You are located in the province of Quebec, Canada, the following clause applies: The parties hereby confirm that they have requested that this Agreement and all related documents be drafted in English. Les parties ont exigé que le présent contrat et tous les documents connexes soient rédigés en anglais.
...
By typing 'agree' you are agreeing to the terms of the software license agreements. Type 'print' to print them or anything else to cancel, [agree, print, cancel]
agree
$ brew update
あ, いけたわ.

今や公開されてるAPIも多すぎて...
プレーヤーを WebView なしで埋め込みたいだけなのに...

いちいち調べるのが面倒なので手順メモ.
・ libs/ 以下にタウンドードした jar を置く.
dependencies {
compile files('libs/YouTubeAndroidPlayerApi.jar')
}
・ API11+ であれば全て使える.
・ DEVELOPER_KEY を取得する必要がある.
・ 画面の回転時の再読み込みを AndroidManifest.xml で考慮.
<activity
...
android:screenOrientation="nosensor"
android:configChanges="orientation|screenSize|keyboardHidden”>
・ YouTubeFailureRecoveryActivity 作成する.
public abstract class YouTubeFailureRecoveryActivity extends YouTubeBaseActivity implements
YouTubePlayer.OnInitializedListener {
private static final int RECOVERY_DIALOG_REQUEST = 1;
@Override
public void onInitializationFailure(YouTubePlayer.Provider provider,
YouTubeInitializationResult errorReason) {
if (errorReason.isUserRecoverableError()) {
errorReason.getErrorDialog(this, RECOVERY_DIALOG_REQUEST).show();
} else {
String errorMessage = String.format(getString(R.string.error_player), errorReason.toString());
Toast.makeText(this, errorMessage, Toast.LENGTH_LONG).show();
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == RECOVERY_DIALOG_REQUEST) {
// Retry initialization if user performed a recovery action
getYouTubePlayerProvider().initialize(DeveloperKey.DEVELOPER_KEY, this);
}
}
protected abstract YouTubePlayer.Provider getYouTubePlayerProvider();
}
・ Activity の親に YouTubeFailureRecoveryActivity を.
public class PlayerViewDemoActivity extends YouTubeFailureRecoveryActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.playerview_demo);
// 処理開始
YouTubePlayerView youTubeView = (YouTubePlayerView) findViewById(R.id.youtube_view);
youTubeView.initialize(DeveloperKey.DEVELOPER_KEY, this);
}
@Override
public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer player,
boolean wasRestored) {
if (!wasRestored) {
player.cueVideo("wKJ9KzGQq0w”); // 動画ID
}
}
@Override
protected YouTubePlayer.Provider getYouTubePlayerProvider() {
return (YouTubePlayerView) findViewById(R.id.youtube_view); // プレーヤーID
}
}
・ レイアウト (layout/playerview_demo.xml)
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:textAppearance="@android:style/TextAppearance.Small"
android:gravity="center"
android:text="@string/playerview_text"/>
<com.google.android.youtube.player.YouTubePlayerView
android:id="@+id/youtube_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
という雰囲気.
Fragment 内に埋め込むなら, Activity が固定されてるものとして,
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
int section = getArguments().getInt(ARG_SECTION_NUMBER);
View rootView = inflater.inflate(R.layout.playerview_demo, container, false);
// 処理開始
YouTubePlayerView youTubeView = (YouTubePlayerView) rootview.findViewById(R.id.youtube_view);
youTubePlayerFragment.initialize(DeveloperKey.DEVELOPER_KEY,
(YouTubePlayer.OnInitializedListener)getActivity());
}
YouTube Android Player API - YouTube — Google Developers
サンプルアプリケーション - YouTube — Google Developers
なんなんだろうな, まじで.

バージョン 5100000 以下を使用してください
と書いてるので最新バージョンは, 5.1.00 と推定.
dependencies {
compile "com.google.android.gms:play-services:5.1.00"
}
アウチ.
きっと, ベストな バージョンは 「5.0.89」なのでしょうね?
dependencies {
compile "com.google.android.gms:play-services:5.0.89"
}
なんか, ここら, 最近あやしい...
「Google Play services out of date. Requires 5208000 but found 5089036」といってるけどこれは?