カテゴリー: Java関連

android:actionBarStyle requires API level 11 (current min is 8)


「アクションバーのスタイル設定」の内容を試して遭遇したエラー(´・ω・`)

サポートライブラリを使用して、android:minSdkVersionが11より低い場合に発生。
eclipseの設定が違うのか、何処か他のページで回避法が記載されているのか
わからないが、少なからず「アクションバーのスタイル設定」では原因も回避法も
わからず(´・ω・`)

“android:actionBarStyle”でぐぐる。幾つかヒットしたページを眺めるうちに
回避法らしきものを発見ヽ( ・∀・)ノ
Android アプリ開発で使える XML の Tools 属性

tools:targetApi
Java における @TargetApi アノテーションと似たもの。 指定の要素がどの API level 以上で解釈可能なものなのかを、API level のコードネームか整数で指定することができる。
これも lint による検査時に使用される。
例えば android:actionBarStyle を API Level 11 より古い Android も対象にしているアプリで使うと 『android:actionBarStyle requires API Level 11 (current min is 7)』 ってエラーが lint で出されるけど、そういう場合にこの属性を使えば良い。

これだ(`・ω・´)と思い、あんまりよく読まず属性を付与してみるも、変化なし。
あるぇ(・3・)?と思いつつ、更にリンクされていたTools Attributesというページを開く。

<FrameLayout xmlns:android=”http://schemas.android.com/apk/res/android”
xmlns:tools=”http://schemas.android.com/tools”
android:layout_width=”match_parent”
android:layout_height=”match_parent” >
….

あ(ノ∀`)
名前空間のなんたらこうたらの「xmlns:tools=”http://schemas.android.com/tools”」を
指定し忘れていたw

多分、こういう形になればエラーが消えるはず。

<resources>
    <!-- the theme applied to the application or activity -->
    <style name="CustomActionBarTheme"
           parent="@style/Theme.AppCompat.Light.DarkActionBar"
           xmlns:tools="http://schemas.android.com/tools">
        <item name="android:actionBarStyle" tools:targetApi="11">@style/MyActionBar</item>
 
        <!-- Support library compatibility -->
        <item name="actionBarStyle">@style/MyActionBar</item>
    </style>
 
    <!-- ActionBar styles -->
    <style name="MyActionBar"
           parent="@style/Widget.AppCompat.Light.ActionBar.Solid.Inverse">
        <item name="android:background">@drawable/actionbar_background</item>
 
        <!-- Support library compatibility -->
        <item name="background">@drawable/actionbar_background</item>
    </style>
</resources>

名前空間の宣言は<style>じゃなくて<resources>の方が良いのかな?
このパターンだと関係してくるのは一つ目の<style>のところだからこれでもいいけど。

そいでactionbar_background.pngという名前の
actionbar_background
みたいなのをres/drawable-ldpiの辺りにぶち込んで実行すれば動くはず。

一応解決したので詳しく読まなかったが、バージョン別のフォルダにそれぞれの
バージョン向けのtheme.xmlを置いても回避出来るという話?
android:actionBarStyle requires API level 11
よくよく読んでみると、このページにも上記の回避法も書いてあるか。

Issue with changing ActionBar background – Android
画像を用意したくなかったら、ハードコーディングは良くないけど、
色指定する方法もあるよとのアドバイスもあったが試してないw


テキストカラーのカスタマイズの方も似たような修正を加えて、

<resources xmlns:tools="http://schemas.android.com/tools">
    <!-- the theme applied to the application or activity -->
    <style name="CustomActionBarTheme"
           parent="@style/Theme.AppCompat"
           xmlns:tools="http://schemas.android.com/tools">
        <item name="android:actionBarStyle" tools:targetApi="11">@style/MyActionBar</item>
        <item name="android:actionBarTabTextStyle" tools:targetApi="11">@style/MyActionBarTabText</item>
        <item name="android:actionMenuTextColor" tools:targetApi="11">@color/actionbar_text</item>
 
        <!-- Support library compatibility -->
        <item name="actionBarStyle">@style/MyActionBar</item>
        <item name="actionBarTabTextStyle">@style/MyActionBarTabText</item>
        <item name="actionMenuTextColor">@color/actionbar_text</item>
    </style>
 
    <!-- ActionBar styles -->
    <style name="MyActionBar"
           parent="@style/Widget.AppCompat.ActionBar">
        <item name="android:titleTextStyle" tools:targetApi="11">@style/MyActionBarTitleText</item>
 
        <!-- Support library compatibility -->
        <item name="titleTextStyle">@style/MyActionBarTitleText</item>
    </style>
    <!-- ActionBar title text -->
    <style name="MyActionBarTitleText"
           parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title">
        <item name="android:textColor">@color/actionbar_text</item>
        <!-- The textColor property is backward compatible with the Support Library -->
    </style>
 
    <!-- ActionBar tabs text -->
    <style name="MyActionBarTabText"
           parent="@style/Widget.AppCompat.ActionBar.TabText">
        <item name="android:textColor">@color/actionbar_text</item>
        <!-- The textColor property is backward compatible with the Support Library -->
    </style>
  </resources>

res/values/の下にcolor.xmlを作成して

<resources>
    <color name="actionbar_text">#FF0000</color>
</resources>

のような感じにすると
a01
みたいな結果になるはず。(“a01″はアプリ名なのでその部分は異なる)

「タブインディケイターのカスタマイズ」はまだやってない(ノ∀`)


前々から気になっていたのだが、ごっぐるのトレーニング内容って誰向けというか
どのくらいの知識を持つ人間に対して書かれているんだろうか?
初心者だったら、このtools:targetApiや他の回避方法ってわからないような気が
するんだけど、俺氏以外の人は皆優秀な初心者達なんだろうか(´・ω・`)

Error executing aapt: Return code -1073741819


アクションボタンの追加
内容を試していたら謎のエラーに遭遇した(´・ω・`)

Error executing aapt: Return code -1073741819	androidtest01		行 1	Android ADT Problem

紆余曲折の結果、サポートライブラリ使用時にres/menu/main_activity_actions.xmlの内容を
上の方のandroid:showAsAction属性を用いたものにしておくと出るエラーのようだ…_| ̄|○

「xmlns:yourapp=”http://schemas.android.com/apk/res-auto”」を追加して
android:showAsAction属性をyourapp:showAsAction属性にしたら、取り敢えず
このエラーは出なくなった。


この後、Action Bar Icon Packをダウンロードしてきて
それぞれのフォルダにコピーした。非常に面倒くさかったが、
これはもっと簡単に出来る方法はないのか(´・ω・`)
エクスプローラーで上書きしてeclipseでリフレッシュするのがいいのか?
addpng

そのまま実行したら

Could not find method android.content.pm.PackageManager.getActivityLogo, referenced from method com.actionbarsherlock.internal.widget.ActionBarView.

みたいなエラーに遭遇。
ぐぐっても解決法が見つからなかったので取り敢えずクリーンを実行。
そうしたらこのエラーは消えたんだったかな?
でも、今度はまた”rを変数に解決できません”が…_| ̄|○
新規構築したeclipseなのに…(´;ω;`)

サポートライブラリを使っているのが悪いのかと、Android4.0の仮想デバイスを試そうとするも
マシンパワーが追いつかず試せない…__○_

仕方がないので実機のNovo7をつなぐがドライバが入ってなかった(ノ∀`)
入れ方を忘れていたのでworkflowのusbドライバのインストールを読む。
翻訳するのは面倒臭いがこの流れだけはページにしとくべきか。

なんやかんやで実機で実行→やっぱりエラー…(ヽ’ω`)

何が何だかわからんといろいろと眺めているうちに気づいた( ゚Д゚)ハッ
 
 
 
 
 
 
@string/action_searchの実体をstring.xmlに作ってなかっただけか(>’A`)>

これは初心者殺しやろ(・∀・)

xmlの記載に間違いがある場合にR.javaが生成されないという話だけれども、
整合性も取れてないといけないのなら、何らかのエラーを表示してくれればいいのに。
なんでxml絡みのエラーはチェックしてくれないんだろうか。
GAE絡みの時も同じことを思ったような…

rを変数に解決できません(´・ω・`)


何もやってないのにエントリ名のエラーが出た(´・ω・`) ←ゼッタイウソ ナンカヤッテル

アクションバーのセットアップをチェックする為にサポートライブラリを入れて
ちょこっと設定を変えたりしたけど、それ以外は何もやってないのに
“rを変数に解決できません”というエラーが発生した。
これはバグですか(・∀・)? ←ヤッパリナンカヤッテタ

発生した原因も解決した理由もわからないが一応エラーが消えるまで流れ。
なんか大昔にもR.javaではまっていたような気がする…


R.java

そもそもR.javaってなんだべ(´・ω・`)?
おかゆライスが好きで下駄履きで自転車に乗るアンドロイドかというと
そういうことでもないらしい。 ヤッテクルヨ~ゴ~テンゴ~(・∀・)♪

SDKによって自動生成される、リソースへ与えられたリソースIDを
まとめて保持するjavaのソースファイルということらしい。

中身を見てみると

public static final class string {
    public static final int action_settings=0x7f050001;
    public static final int app_name=0x7f050000;
    public static final int hello_world=0x7f050002;
}

みたいな感じで各リソースカテゴリを表す内部クラスを持ち、
その中にリソースIDをint型の静的変数として保持しているみたい。

各リソースの設定を行うxmlファイルからの自動生成だから
手動では変更を加えてはいけないらしい。

ResourceだからR.javaで、自動生成ファイル(Auto generated file)が格納されるから
genフォルダというストレートな命名と考えても良いのだろうか( ・´ω・`)? ドウデモエエガナ


R.javaが生成されない原因

さて、このR.javaが自動生成されないのは何故か。
早速ぐぐった。主な原因は

  1. リソース設定用の各xmlファイル内でスペルミス等の間違いがある。
  2. コンパイラ準拠レベルが”1.6″ではなく”1.7″になっている。
  3. Androoid SDKが最新ではない(SDK buildツールがインストールされていない?)。

俺氏の環境だと新規作成したAndroidプロジェクトの段階で既にR.javaが
生成されていないので一番目はおそらく関係ない。

じゃあ二番かと思って準拠レベルが”1.7″かと思って見てみたらそんなこともなく…(´・ω・`)
compiler

コンパイラ準拠はともかくJDK1.7がなかったのでついでに落としてきて検出させ、
一回JRE環境として設定した後でまた6に設定し直した。これは自動生成とは
関係ないから当然のことながら状況は変わらず。

ちなみにJRE環境で指定したバージョンがコンパイラ準拠の値より大きいと
以下のようなメッセージが表示される。これも一致させないと駄目なのか。
compiler_caution

三番目のSDKかと思い、Android SDKマネージャを起動する。
SDKツールとしては最新版のようであったが、SDK buildツールは入ってなかった(ノ∀`)
「これや(`・ω・´)」と思いインストールを始める。
sdk_build_tools

だがしかしeclipseがインストール途中(ダウンロード途中?)で応答なしに…_| ̄|○
タスクを終了してeclipseを再起動して再インストールをする。どうもネット環境が悪かったのか
同時にプログラムを起動し過ぎていた所為か、更にもう一度インストールに失敗したような?
とにかく三度目くらいにインストールに成功。

「これで勝つる(`・ω・´)」と思ったのだけれども状況は変わらなかった …(ヽ’ω`)

[更新の確認]をしてねと言われたのでしたけどやはり状況は変わらず。
update_caution
checkforupdates


万事休す ∩(´・ω・`)∩ o・te・a・ge

さっぱり解決法がわからないので、手当たり次第に考えられる方法を試す。

  • プロジェクトをクリーンして再ビルドする。
  • eclipseを再起動する。
  • windowsを再起動する。←多分これは関係ないw

clean
clean2
だがしかし依然として状況は変わらず… (ヽ’ω`)

こうなってくると打つ手がないので、eclipseを再構築するしかない。
ということでpleiades all in oneをもう一度ダウンロードしてくる。
700MBもあるので暇になる(´・ω・`)

どうせ再構築するから古いのはどうなってもいいかと適当に
SDKビルドツールを一旦削除して再インストールしてみる。
やっぱり状況は変わらない…ダウンロードもまだまだ終わらない(´・ω・`)

どうせこんなの関係ないよねとコンパイラ準拠を一旦”1.7″にする。
面倒くさいので再ビルドはしなかった。そして”1.6″に戻して
再ビルドするにして放置した。


よくわからないけど解決∩( ・ω・)∩ Ba・n・za・i

しばらく経ってから見てみたら再ビルドが終了していた。
eclipseを再起動した。R.javaのエラーがなくなっていた(・∀・)
普通に実行出来るようになった。
success

ダウンロードフォルダに新しいpleiades All in oneが残った。

                       おしまい(・∀・)
 
 
 
 
 
  
 
 
 
 
 


Rの下の赤い波線再び( ;・´ω・`)ゴクリッ

全てが解決したと思い安心したのも束の間、新規に作成したAndroidプロジェクトで
Rの下に赤い波線が再び表示された…_| ̄|○

しかもこのエラーについての説明はない。なんぞこれ(´・ω・`)
実行するまでは説明ってつかないんだっけ?
r_error01 

ここで実行をすると
r_error02
というエラーが発生する。

“AndroidManifest.xml file missing!”というエラーでぐぐると、
色んな理由があるみたいでよくわからない(´・ω・`)

まあ何にしてもエラーダイアログを閉じた後に再実行したり、
プロジェクトをクリーンして再ビルドすると赤い波線は消える…

わけがわからないよ(´・ω・`)


とまあ非常にわけがわからないままに解決してしまったので何ともスッキリしない。
環境が不安定だったからeclipseの設定が上手く変更されていなかったとかあるのだろうか。

或いはうちのはeclipse内の設定等がぐちゃぐちゃになってしまっているのか、
サポートライブラリがきちんと設定出来てないのかな…
再構築した方が良いのか (ヽ’ω`)

上記に挙げた以外にも

  • Android.Rをインポートしてしまっている。
  • ソースファイルやリソースファイルの場所が同一パス(同一ドライブ?)に存在しない。

みたいな理由でもエラーになるらしい。

上の場合はandroid.Rのインポート文を除去すればいいようだ。
remove_import02

何もしてないのに”activity_main は解決できないか、フィールドではありません”みたいな
エラーが出ている場合はおそらくこのAndroid.Rをインポートしている所為だと思う。
remove_import01

下の場合は正しいパッケージパスを指定すればいいらしいが…
何にしても色々と面倒なエラーだ(´・ω・`)

関係ないけどサポートライブラリv13ってなんだ…

俺氏、大いに焦る( ´・ω・`;)

以前、foto-haikingを作るときにはてなの利用規約で複アカ禁止だったのを
知らずに複アカを作って使っていたことを思い出し、複アカを削除した。
ついでに最近はてなへの書き込みもしてないので主アカももう削除しようかなぁと
思いつつ、あることに気づく。

はてなAPIを利用してるから、このアカウントを消すとサービスを
止めないといけない。まあでもサービスはほとんど使われてる形跡は
ないのでそれでもいいかなと思いつつも、それ用のアカウントを作って
OAuth consumer keyを書き換えて、今のアカウントを削除すれば
いいかと考え直す。


じゃあさくらVPS上のgitoliteからデータを持ってこようとgit cloneする。
なんかおかしい…内容が古すぎる( ;・´ω・`)ゴクリッ

foto-haikingのコードはあるけどもpainting絡みのコードやその対応が全くない………

(||゚Д゚)ヒィィィィィィィィィ!(゚Д゚||)

eclipseでのプッシュってもしかしてローカルへのプッシュだけなのか_| ̄|○
まあ単純にやり方を間違えてただけかもしれないが、何にしても言えることは
ソースコードが残ってない(・∀・)


サービス自体を止めるのは別に何の問題もないんだけれども、
ソースコードがないのは結構ショックでかい…(´・ω・`)
大したコードではないけども何かの触媒にはなるかもしれないので
どうにか残しておきたい……

駄目元で適当に調べてみる。

む(`・ω・´)
GAE からソースをダウンロード

ああでも、これはPythonか… (ヽ’ω`)

でもPythonがあるならJavaもあるんじゃ……
ってあるやん(・∀・)
Downloading an Application

なんかやり方がよくわからない(´・ω・`)
とりあえずJava用のGAEのSDKをダウンロードしてきて解凍する。
何故かこの時間違えてPython用のSDKを落として来てインストールを
してしまったがそれについては気にしない( ´・3・)

Windowsなのでコマンドプロンプトからappcfg.cmdを叩くが何かエラー(´・ω・`)

まずつまずいたのが認証パスワード。EメールアドレスというかGoogleアカウントを
入力した後にパスワードを入力してもうまく行かない。
Eメールアドレスもパスワードも正しい(´・ω・`) むぅ…

ぐぐる。
これか(ノ∀`)
Google App Engine のアップロードを2段階認証プロセスに対応させる

アプリケーション固有のパスワードを生成して、それを打ち込んだら
それは通った。

…が、今度は別のエラーかなんかが発生(´・ω・`)

ぐぐる。というか前にぐぐった結果を眺める。
Download code from Google App Engine Java is now possible – Ubuntu
のようにdownload_appの後に出力先フォルダを指定したら
うまく落ちてきたような…この辺、記憶が曖昧…

windowsなのに出力先フォルダをドライブレターからのフルパスを
指定しないで失敗した記憶もあったりなかったり( ・´ω・`)


ヽ( ・∀・)ノヒャッハーと喜び勇んで出力先フォルダを見る。
classファイル……………ですよねー(・∀・)

javaには確か逆コンパイラがあるはずとぐぐる。
jadか(・∀・)
[memo]Jad(Javaの逆コンパイラ)で僕にもソースが見えるの巻

eclipse用のプラグインもあるらしいが面倒くさいのでjadでやる。
ここでもwindowsであることを忘れてパス指定を間違えたりする( ´・3・) デモキニシナイ


まあ何やかんやでソースファイルを復元出来たみたいだけれども、
チェックするのが面倒くさいのでとりあえず保留ヽ( ・∀・)ノ
ざっと見た感じ、大したコードではなかったけれども( ´・3・) キニシナイ

結果的にGoogle app engineからjavaのclassファイルをダウンロードしてきて
逆コンパイルしてソースコードに戻す手順のエントリになった(ノ∀`)

一応、ダウンロード出来るのはアップロードした人で、
管理ページで禁止されていないアプリケーションのみらしい。


はてなのアカウントもGoogle+も一旦やめようかなと思いつつ
色々と面倒くさくてまだ進んでいない(ノ∀`)