[Android] Lollipop (API 21) アップグレードでビルドエラー

Android 5.0 にアップグレードしたら、いきなりエラー
AppCompat v7 がらみで、エラーコードは色々出てきます

  • Description Resource Path Location Type, ActionBarActivity cannot be resolved to a type
  • R cannot be resolved to a variable
  • No resource found that matches the given name ‘Theme.AppCompat.Light’.
  • No resource found that matches the given name ‘Theme.AppCompat.Light.DarkActionBar’.
  • Found 2 versions of android-support-v4.jar in the dependency list
  • using v21 attributes; synthesizing resource com.example.testapp:layout/abc_screen_toolbar for configuration v21.
  • removing attribute http://schemas.android.com/apk/res/android:touchscreenBlocksFocus from
  • using v21 attributes; synthesizing resource com.example.testapp:drawable/abc_cab_background_top_material for configuration v21.
  • removing attribute http://schemas.android.com/apk/res/android:paddingMode from

  •  

尚、これらは2014/11、環境はEclipseでの情報です
その後、Android Studioが正式リリースとなりましたので
Android Studioでのエラーは原因対策等は異なるかもしれません
(しぶとくEclipseを使いたい人には有用でしょう)
 

新しくプロジェクトを作成

 
新規にプロジェクトを作成します
API:8 ~ API:21
Theme は特になしですが、Blank Activity を選択
ActionBar が表示される設定です
 
テスト環境 (eclipse Juno , 2014/11/24)

  1. Tools
    • Android SDK Tools: 23.05
    • Android SDK Build-tools: 21.1.1
  2. Android 5.9 (API 21)
    • SDK Platform: API 21 rev.1
  3. Extras
    • Android Support Library: 21.0.2

 
lollipop_0
 

appcompat_v7 エラー

 
これでBlankプロジェクトを作成すると
いきなりエラーとなります
lollipop_01
 
エラーの箇所を見てみると
android.support.v7.app.ActionBarActivity
でまず問題が起きているようです
 
lollipop_022
 
プロジェクトを選択して右クリックで
Propertiesを選びます
 
lollipop_03
左のメニューで「Android」を選択
右の一番下にある Library には
appcompat_v7 があります
ただ、これは古いバージョンのものです
 
lollipop_04
 

android-support-v7-sppcompat インストール

 
appcompat_v7 は miniSDKVersion を13 以下に設定すると自動的に作成されてしまいます
14以上にするのは1つの回避策ではあります
 

 
API-21 では、新たに設定しないといけません(2014/11/24現在)
https://developer.android.com/intl/ja/tools/support-library/setup.html
 
既にあるプロジェクトをインポートする要領で
.<sdk>/extras/android/support/v7/appcompat/
からプロジェクトを生成します

  1. File 「Import…」
  2. Existing Android Code Into Workspace を選び
  3. RootDirectory を android sdk 下のappcompat にします
    • <sdk>/extras/android/support/v7/appcompat/
    • このファイルがない場合は(注1
  4. android-support-v7-sppcompat が生成されます
  5. libs フォルダーにある jar ファイルを右クリックで「Add to Build Path」します
  6. jar ファイルを選び「Configure Build Path」から「Order and Export」タブに入ると、jar ファイルが設定されています
  7. 「Android Dependencies」のチェックを外します

lollipop_2
 
出来上がった android-support-v7-sppcompat を新しく登録します
 
古い appcompat_v7 は削除しておきます
 
lollipop_3
 
これでアプリを実行すると
 
「Hello World!」 が表示されました
 
lollipop_7
 
注1
Library がインストールされていませんので
メニューの「Window」-> 「Android SDK Manager」
「Extras」のカテゴリーにある
「Android Support Library」をインストールしてください
 
「Android SDK Manager」がメニューからでてこない場合は
「Window」->「Customize Perspective」にある
「Command Groups Availability」のタグから
「Android SDK and AVD Manager」にチェックを入れます
これで「Navigation」の下に現れます
 

既存プロジェクトのエラー対策

 
上は新規プロジェクトですが
既存のプロジェクトを API 21 でビルドすると
エラーが発生します

  1. プロジェクトのターゲットをAPI 21 にする
    • プロジェクト右クリックで、「Properties」 「Android」 でTarget Name を Android 5.0 にチェックします
    • Manifest の<uses-sdk /> をandroid:targetSdkVersion=”21″に変更
    • Project.prperties ファイルの記述が target=android-21 となっているのを確認
  2. android-support-v7-sppcompat の設定
    • 古い appcompat_v7 を削除
    • android-support-v7-sppcompat をインストール
    • 「Properties」のLibrary にandroid-support-v7-sppcompatを設定する
  3. libs フォルダーの android-support-v4.jar はandroid-support-v7-sppcompatに含まれているので削除する
  4. 「Project」->「Clean」->「Build」 を実行
  5. 「Properties」->「Java Build Path」にてLibrariesにリンクエラーがあれば削除する

これでエラーは解消すると思います
そのうち、新しいバージョンでこのあたりを自動で修正してもらえると
ありがたいですね