2024年8月30日金曜日

ビルドはエラー無く終わるのに、なぜかエミュレーターでアプリ起動してくれない。

参考

SigningReport の表示は無かったけど、
「緑のapp」「エミュレータ名」
ではなく、
「プロジェクト名」「空欄」
になってた。

エミュレータが選択されてない?

緑のappを選択したら、自動的にエミュレータも選択され、
しばらく処理が走った後、アプリ起動した。

2024年8月29日木曜日

XML のエラー

SDK processing. This version only understands SDK XML versions up to 3 but an SDK XML file of version 4 was encountered. This can happen if you use versions of Android Studio and the command-line tools that were released at different times.

参考

https://stackoverflow.com/questions/70368175/why-am-i-getting-this-warning-and-how-to-resolve-it-this-version-only-understan

click "Repair IDE" in the Android Studio.

2023年6月17日土曜日

ECナビ

ネットショッピングのポイントが実質3倍になる方法!?
すでに700万人以上が得をしているポイントサイト「ECナビ」をはじめるべき5つの理由!

▼登録無料!まずは登録してみよう!▼
https://ecnavi.jp/invite?id=tk0t3&ref=62

--------------------------------------------------------

1. ECナビはポイント還元率業界トップクラス!
ネットショッピングが圧倒的にお得に!

普段のお買い物でも、購入金額に応じてお店のポイントがもらえたりしますよね。よりたくさんのポイントがもらえるよう、ポイントアップキャンペーンなどの日を狙って買い物する、という人も多いんじゃないでしょうか?

実はECナビを経由してネットショッピングをすると、ショップポイント(お店のポイント)とは別にECナビポイントももらえます!つまりポイントの2重取りが可能!

●例えばポイント還元率1%のお店の場合
ショップポイント1% + ECナビポイント1% =実質ポイント2倍!

●さらに支払いにポイント還元率1%のクレジットカードを使うと・・・
ショップポイント1% + ECナビポイント1% + クレジットカードポイント1% =実質ポイント3倍!

それぞれのポイント還元率はショップや時期によっても変わってきますが、毎回のショッピングでポイントの2重取り、3重取りが可能!

ECナビはポイント還元率が業界トップクラス!
いつものネットショッピングもECナビから行うだけで、劇的にお得に!!

▼ECナビへの無料登録はこちら▼
https://ecnavi.jp/invite?id=tk0t3&ref=62

--------------------------------------------------------

2. ECナビならカード発行の特典も2重取り!
大量ポイント案件で一気にポイントを貯めよう!

ECナビは、カード発行などでのポイント還元も業界トップクラスなことで有名です。

ECナビからカード発行をすれば、カード会社の特典に加えて、ECナビポイントももらえます。キャンペーンで1万円以上相当のポイントがもらえることも!

ほかにも、ECナビには大量ポイントがもらえる案件がたくさん。
お得なキャンペーンも多くあるので、要チェックです!

▼ECナビへの無料登録はこちら▼
https://ecnavi.jp/invite?id=tk0t3&ref=62

--------------------------------------------------------

3. ECナビポイントをマイルに交換すれば月間20,000マイルも夢じゃない!?知る人ぞ知る毎年タダで海外旅行に行く方法とは

ECナビポイントは現金をはじめさまざまな交換先が用意されていますが、最終的には航空会社のマイルにも交換することが可能です。

飛行機にまったく搭乗せずに年間30万マイル貯める人も!?

ポイントをたくさん貯めてマイルに交換、ビジネスクラスでのリッチな海外旅行を目指そう!

▼ECナビへの無料登録はこちら▼
https://ecnavi.jp/invite?id=tk0t3&ref=62

--------------------------------------------------------

4. 「カード発行とかハードルが高すぎ・・・」でも大丈夫!
ECナビなら毎日ポイントが貯まるコンテンツがいっぱい!
実質無料の飲食モニターや商品モニターも!

ECナビにはショッピングやカード発行以外にも手軽にポイントが貯まるコンテンツがたくさんあります。

たとえば・・・

●簡単なアンケートに回答するだけ
企業から届く簡単なアンケートに回答するだけでポイントがもらえます。
あなたの回答が企業のマーケティングに反映されるかも!?
また、座談会形式のアンケートは報酬が高額なのでガッツリ稼げます。

●簡単なミニゲームに参加するだけ
楽しい釣りやクレーンゲームなど、簡単に遊んでポイントがもらえます。

●アプリのダウンロードやお得なサービスに無料会員登録をするだけ
スマホのアプリをダウンロードしたり、無料会員登録や資料請求をするだけでポイントがもらえます。

●モニター体験でも
飲食店をはじめビューティー、お買い物など様々なモニター体験でポイントがもらえます。100%還元の案件なら実質無料!?

その他にもさまざまなコンテンツでどんどんポイントが貯まります!

▼ECナビへの無料登録はこちら▼
https://ecnavi.jp/invite?id=tk0t3&ref=62

--------------------------------------------------------

5. 「そんなうまい話あるわけない・・・あやしいんじゃないの?」ECナビは700万人が利用する運営実績15年以上の超優良ポイントサイトの一つです!

「ポイントサイトっていろいろあるけど、怪しくない?」
「なんか面倒くさそう」
そんなイメージを持っていませんか?

ECナビは運営実績15年以上、上場企業の100%子会社が運営する超優良ポイントサイトの一つです。
プライバシーマークも取得しているので安心安全にポイントが貯められます。

▼ECナビへの無料登録はこちら▼
https://ecnavi.jp/invite?id=tk0t3&ref=62

--------------------------------------------------------

★さらに、いまなら・・・★

記事内リンクからの会員登録と本人認証完了で、「ECナビポイント1,500ポイント」をもれなくプレゼント!

いろいろなペースで稼げちゃうポイントサイト「ECナビ」!ポイントを貯めてお小遣い稼ぎをしたい人には絶対オススメです♪

▼登録無料!まずは登録してみよう!▼
https://ecnavi.jp/invite?id=tk0t3&ref=62

2018年9月23日日曜日

Android Studio でリリースビルド時にエラー

アンドロイドスタジオでリリースビルドしたらエラーで失敗!

Could not find com.android.tools.lint:lint-gradle:26.1.4.
Searched in the following locations:
    file:/C:/Users/~~/AppData/Local/Android/Sdk/extras/m2repository/com/android/tools/lint/lint-gradle/26.1.4/lint-gradle-26.1.4.pom
    file:/C:/Users/~~/AppData/Local/Android/Sdk/extras/m2repository/com/android/tools/lint/lint-gradle/26.1.4/lint-gradle-26.1.4.jar
    file:/C:/Users/~~/AppData/Local/Android/Sdk/extras/google/m2repository/com/android/tools/lint/lint-gradle/26.1.4/lint-gradle-26.1.4.pom
    file:/C:/Users/~~/AppData/Local/Android/Sdk/extras/google/m2repository/com/android/tools/lint/lint-gradle/26.1.4/lint-gradle-26.1.4.jar
    file:/C:/Users/~~/AppData/Local/Android/Sdk/extras/android/m2repository/com/android/tools/lint/lint-gradle/26.1.4/lint-gradle-26.1.4.pom
    file:/C:/Users/~~/AppData/Local/Android/Sdk/extras/android/m2repository/com/android/tools/lint/lint-gradle/26.1.4/lint-gradle-26.1.4.jar
gradle/26.1.4/lint-gradle-26.1.4.jar
    https://jcenter.bintray.com/com/android/tools/lint/lint-gradle/26.1.4/lint-gradle-26.1.4.pom
    https://jcenter.bintray.com/com/android/tools/lint/lint-gradle/26.1.4/lint-gradle-26.1.4.jar
Required by:
    project :app

というエラー。

下記ブログを参照。
http://no4393.blog77.fc2.com/blog-entry-3221.html

Android Studio フォルダから、よく似たものをコピーして対応しているようだ。

要は、pomファイルとかが、6つのディレクトリのうちのどこかにあればいいのかな。

自分の環境だと、
C:\Users\~~\AppData\Local\Android\Sdk\extras
にm2repositoryフォルダが無かった。

変に既存フォルダがあるところに上書きしてもヤバそうと思ったので、むしろ何も無いextras 直下にm2repository フォルダごとコピーしてみることに。

自分のアンドロイドスタジオをインストールしている場所である
D:\Android\Android Studio\gradle
直下にあるm2repositoryフォルダを、
C:\Users\~~~\AppData\Local\Android\Sdk\extras
直下にコピー。

無事にエラーなくビルドできた!


余談。
前回もリリースAPKを作る時に躓いたし、やっぱり大変ね。

2018年9月21日金曜日

failed to find target with hash string エラー

アンドロイドスタジオで、プロジェクトをインポートした時に、

failed to find target with hash string 'Google Inc.:Google APIs:21'

というエラーが出る。

Tools - SDK Manager - Show Package Details にチェック。
(※チェックしないと個別に選択できない。)
21にあたる Google APIs を選択してインストール。

※なおSDK Manager の項目自体が出てこないこともあり、その時は別プロジェクトから起動か、直接?起動。

2018年9月20日木曜日

プライバシーポリシー

CloverQ の公開アプリのプライバシーポリシー

・ネットワーク接続の表示、ネットワークへのフルアクセス
  アプリ内広告(AdMob,adstir,AMoAd,Nend,i-mobile)で必要とされています。
  AdMob のプライバシーポリシーはこちらです。
  adstir のプライバシーポリシーはこちらです。
  AMoAd のプライバシーポリシーはこちらです。
  Nend のプライバシーポリシーはこちらです。
  i-mobile のプライバシーポリシーはこちらです。

2016年8月6日土曜日

Admob のために、Google Play Services を導入

しばらく前から、Admob にて、Google Play Services を使うようになっていたが、更新も手間なので、放置していた。

しかし、古いSDKは、2016年9月15日でサポート終了とのメールが来ている。

というわけで、更新!


エクリプスで作成していたアプリだが、さすがにAndroidStudio を導入。

インポートすると、エラーは出たが、メッセージをみて、インストールとかしてれば、あっさり完了。

※一応、書き換えが必要なものもあった。参考
http://qiita.com/shoma2da/items/1e84807809e7d1f4803b


ビルドできたので、リリースAPKを作ろうとしたところ、エラー。

Error:The number of method references in a .dex file cannot exceed 64K.

どうも dex ファイルを64K以下にしろ、みたいな。

そんなん言われても、導入したの Google Play Services だけだし…。


サポート終了を知らせるメールには、
compile 'com.google.android.gms:play-services:9.0.2'
と記述せよと書いてある。

https://developers.google.com/android/guides/setup
を見てみると、やはり
compile 'com.google.android.gms:play-services:9.4.0'
という書き方をしている。

が、どうもこれがマズイっぽい。


以下を参考に
http://qiita.com/niusounds/items/f9a0ab3cbe07878ed8f6

compile 'com.google.android.gms:play-services-ads:9.4.0'

と書いてみた(赤字が追加部分)ところ、すんなり通った!


そんなわけで、1年以上ぶりのアプリ更新、こちらのブログも更新となりました。

2015年8月18日火曜日

PHPでの「->」の意味

PHPの「->」の意味が分からなかったが、下記ページで理解できた。

参照URL
http://www.phppro.jp/qa/536
http://tdak.hateblo.jp/entry/20140406/1396773476


つまり、javaでいう「.」のこと。

Hogeクラスがあったとして、
Hoge hoge = new Hoge();
hoge.Hogeクラスの変数やメソッド
みたいに呼び出すのと同じ。

2015年8月7日金曜日

Android の apk ファイルの解析

・MAC

1. ~.apk のファイルの拡張子を .zip に変更し解凍する。

2. classes.dex ファイルを jar ファイルに変換する。
dex2jar というツールを使用する。

※詳細は以下のページを参照しました。
http://qiita.com/le_skamba/items/04c0a0cfe420be862122#%E3%82%B9%E3%83%86%E3%83%83%E3%83%973-dex--jar

http://sourceforge.net/projects/dex2jar/

ポイントとしては、実行権限をつけてあげる。
(該当のフォルダまで cd で移動して、chmod +x *)
Mac だと、拡張子 .sh のファイルを使う。
(d2j-dex2jar.sh classes.dex)

3. jar ファイルの拡張子を .zip に変更し解凍する。

4. ~.class ファイルを java ファイルに変換する。
使用するツールは、上記サイトを参考に、JavaDecompiler を使う。

http://jd.benow.ca/

JD-GUI
にてMAC なら jd-gui-osx-1.4.0.tar をダウンロード。
実行して、class ファイル選択すると、まとめて表示される。


・最近は、
androguard を使うのが、良いらしい。

https://code.google.com/p/androguard/wiki/Installation

が、導入方法がさっぱり分からん。

2015年7月30日木曜日

MAC でデフォルトのテキストエディタを変更する方法

ファイルを右クリックから、「このアプリケーションで開く」から選択しても、開けるもののデフォルトになってくれない。

以下参照
http://www.lastday.jp/2011/10/25/mac-open-favorite-app-as-default

同じく右クリックから、「情報を見る」で、一覧から「このアプリケーションで開く」の項目を選択し、アプリケーションを選択後、「すべてを変更…」押下で、選択したものがデフォルトになってくれる。

2015年7月29日水曜日

Ruby での加算子

よくある「++」はないので、
hoge += 1
とする。

それどころか、へたに++なんていれると、次の行が文法エラーとなったり、次の行の何かと連結できてしまうと、おかしな挙動になる。
++がダメ、とピンポイントで指摘してくれないので、ハマった。。

2015年7月28日火曜日

static

android にて、変数をstaticで持たせるのは基本NGとのこと。

2015年7月15日水曜日

画面を縦に固定

マニフェストの activity タグに以下を記載。
android:screenOrientation="portrait"

シングルトン

以下のサイトを参考に。
https://sites.google.com/site/androidappdojo/home/lesson/section04/section0405

クラスを使うときの new を呼び出し元ではなく、呼び出し先のそのクラス自身に任せる的な。

コンストラクタは、private にして制限。
getInstance() で呼び出すように書く。

とはいえ、コンストラクタがpublic じゃないと、画面回転させた時などに落ちる。

2015年7月14日火曜日

ダイアログ フラグメント

ダイアログ出すにも、DialogFragment を使えということなのでメモ。
※参考URL
http://developer.android.com/reference/android/app/DialogFragment.html#AlertDialog
http://quesera2.hatenablog.jp/entry/2014/04/09/003146
のFragment→Fragment→Fragment のところ。
http://www.fkmsoft.jp/blog/software/android/fragment/dialog_2.html

アラートダイアログ以外を表示するには、 new AlertDialog.Builder の部分を変更。
ただし表示するものによって、必須の指定があるので、要確認。
たとえば、ドラムロールのTimePickerDialog だと、「~~ extends DialogFragment implements TimePickerDialog.OnTimeSetListener」として、Override で onTimeSet が必須になる。あとなぜか return new ~~~ .create(); じゃだめで、変数宣言して、それをリターンしてやらないとエラーだった。

また、.setView のところ、上記の例では EditText のウィジェットをjavaで生成して入れているが、これも好きなもの(seekbarとか)を入れられるし、レイアウト(XML)で凝ったものでも作ってインフレートしてからセットすることも試してないが、可能かと。

なお、フラグメントから呼び出したダイアログフラグメントより、呼び出し元のフラグメントへ処理を返す方法も記述。
呼び出す際に setTargetFragment しておき、呼び出し先で、getTargetFragment にて取得し、onActivityResult で返してやる。

※最後に。 上記の例では、フラグメントと、ダイアログフラグメントを分離しているが、
フラグメントクラス内にダイアログフラグメントを記述する場合は、public static とする。
「public class MyAlertDialogFragment extends DialogFragment」
 ↓
「public static class MyAlertDialogFragment extends DialogFragment」
意味としては、これは親クラスとは関係ないよ、という宣言。

2015年7月10日金曜日

Java メモ

・数値を文字に変換
String str = Integer.toString(num);

Calendar

カレンダークラスで日時などを指定する方法

・共通
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.setTimeZone(TimeZone.getDefault());

・毎日
例えば11時10分0秒なら、
calendar.set(Calendar.HOUR_OF_DAY, 11);
calendar.set(Calendar.MINUTE, 10); //02などはいけるが、なぜか08以降はダメ。0不要か。
calendar.set(Calendar.SECOND, 0);
※時間指定のみなので、毎日となる。
※なお、秒を指定しないと1分程度遅れた。0秒指定で端末時間でジャスト起動。

・比較
各変数は、以下とする。
現在時刻:calendarNow
設定時刻:calendarSet
int num = calendarNow.compareTo(calendarSet);
if(num>0){
    Log.d("time","現在時刻が、設定時刻より進んでいる。");
}

・メソッドなど詳しく紹介しているサイト
http://www.techscore.com/tech/Java/JavaSE/Utility/8/
add  と roll の違いなど。

・翌日
今日のCalendar.DAY_OF_YEARがsetされているor最初から何も指定していないとして、
calendar.add(Calendar.DAY_OF_YEAR, 1);
すれば、翌日。
Calendar.DAY_OF_YEAR は一年のうちで、今日が何日目か。
なお年末でも大丈夫。

・時刻取得
get メソッドで取得。何もsetしてなければ、現在時刻を取ってくる。
int hour = calendarNow.get(Calendar.HOUR_OF_DAY);
※何かsetしていると、その設定したものを取ってくる。

・正確さ
秒まで指定しないと、1分くらい遅れた。(0秒指定で、分変わりジャスト)

・備考
calendar.set(Calendar.MINUTE, 5);
みたいに数字を書く。
たとえば05という風に書くと、08からなぜかエラー。

2015年7月9日木曜日

R.id.hoge とかのリソースを動的に読み込む方法

以前の記事で、最後に触れている
http://yazakikenji.blogspot.jp/2011/12/imageview.html

が、再掲。

例。
ImageView imageView;

imageView = (ImageView) getView().findViewById(R.id.imageView1);

同じことを動的にやるには、
String str = "1";

imageView = (ImageView) getView().findViewById(getResources().getIdentifier("imageView"+str,"id",getActivity().getPackageName()));

実際には、上記のstrは数字(連番)で持たせて処理の中で、forループなどで使う形になると思う。

・getIdentifier の詳細
第一引数は、XML ファイルで定義したIDを入れる。
同一の名前で最後に数字を連番でつけるのが楽か。(名前が違うと当然エラーになるので注意!XML側でつけたIDの命名規則が一部違っているとかもそう。)
第二引数は、
R.id なら"id"
R.drawable なら"drawable"
となる。
第三引数は、パスの指定だが、それはパッケージ名となる。getPackageName() を使わず、直書きでもいい。なおフラグメントで使うことを想定して、getActivity() している。

2015年7月7日火曜日

レイアウトのクリック可能範囲と、バックグラウンドの反応

java 側にて、OnClickListener を設定したり、
Layout (XML) 側にて、クリック可能なものを設置した場合、
クリック可能範囲が、(なんと表現すべきか)XMLタグの深い方(中にある方)が優先される模様。

なので、例えば表のLinearLayout のbackground に、クリックしたら色が変わるような設定のファイルを置いても、(もちろんclickable="true")
その内部のLinearLayout でもTextView、ImageView でも、クリック可能になった場合、そのクリックイベントが優先されるため、表のLinearLayout の設定は生きない。

もっとも、何かしら隙間があれば、そこをタッチすれば、そこだけは反応してくれるが。

Fragment の作成、遷移

フラグメント