gaggitのブログ

コーディング、ガジェット、TIPS関連、FX

Android Studio OutOfMemoryError: GC overhead limit exceeded

タイトルのエラーが出るようになってしまいました。いろいろ変えてしまっていて、原因がはっきりとは特定できてません。(^^;build-toolのVer.を25にアップを含めてSDKを一通り、AndroidManifest.xml、最後に変えたのは、buid.gradleあたりかと。。。

参照サイトを参考にまずは、gradle.propertiesに以下を追加しましたが、エラーは消えず。

-Xms1024                      # ヒープメモリの最小サイズ

-UseGCOverheadLimit     #GCメモリ越えの警告を無視

次に、Android Studioのメニューから以下を追加して、エラーがなくなりました。

・「Run」「Edit Configurations」をクリックします。

・左のツリーから「Defaults」「Gradle」を選択します。

・「VM Options:」に「-XX:UseConcMarkSweepGC」を追加して、「OK」をクリックします。

 

エラーが出る前にはJavaのバージョンを1.7.0_XXから1.8.0_112に変更しています。

変更後、Javaのパスも変更しています。

変更方法は、「Project Structures」の「JDK Location」をツリーから変更。

 

参照サイト:

garbage collection - Error java.lang.OutOfMemoryError: GC overhead limit exceeded - Stack Overflow

validate resources reference inside android xml file

IntentServiceをコーディングを追加したので、AndroidManifest.xmlにもserviceタグを追加しましたが、タイトルのエラーがビルド時にでました。android:nameのクラス名の前には当然、ドット(.)がありますが、クラス名が赤字となっています。

AndroidStudioの左上にある「Packages」で参照すると、同じ階層にあるように見えますが、「Project」でみると全然、違う階層にありました。

「app」「src」「main」「java」「パッケージ名」に作成したクラスを移動して、ビルドすると、赤字が緑色に変わり、エラーもなくなりました。

ノートPC U24EをWindows10にアップデートしてみました

2週間ほど前にASUS製ノートPC(U24E)がAnniversaryUpdate相当のBuildVersion:1607に勝手にアップデートされてしまいました。前回、デスクトップPCではスリープでエラーとなったため、AnniversaryUpdateから元のバージョンに戻しましたが、ノートPCではスリープは正常に機能しています。

 

 

 

新SignIn認証の認証情報作成方法

Stack Overflowに書かれている「New Google sign in Android」の記事でEric Leschinski氏とKaizieの回答を見てみると、SignIn認証するには、Android用とWebアプリ用に2つのOAuth IDが必要とあります。そして、それは、公式サイトの「Start Integrating Google Sign-In into Your Android App  |  Google Sign-In for Android  |  Google Developers」に書かれているとのこと。このサイトも何度か見たのですが、手っ取り早くSignIn認証したかったので、前回はgithubに転がっていたサンプルを流用しました。では、公式サイトに則って、やってみたいと思います。

1.コンフィグレーションファイルの取得

・「GET A CONFIGURATION FILE」ボタンをクリックします。

・「Create or choose an app」ポップアップ画面で「App name」を選択します。

 (選択すると、App nameの右側に以下のメッセージが表示されます。

  Services will be addes to your existing project in the Google Developers Console.)

・同ポップ画面で、Androidのパッケージ名をフルで入力します。

 (例:com.example.package_name)

・入力後、同意画面が表示され、「CONTINUED TO Choose and configure services」ボタンをクリックします。

f:id:gaggit:20160919203745p:plain

・「Google Sign-In」画面で、AndroidSHA-1認証コードが表示され、一番下の「ENABLE GOOGLE SIGN-IN」ボタンをクリックします。

 (SHA-1の情報は、以前keytoolコマンドで生成した値と同じでした)

f:id:gaggit:20160919203808p:plain

・「Choose and configuration services」画面で、「CONTINUED TO Generate configuration files」ボタンをクリックします。

f:id:gaggit:20160919203846p:plain

・「Download and install configuration」画面で、「file_download」ボタンをクリックし、コンフィグレーションファイルをダウンロードします。ダウンロードしたファイル名は、google-services.jsonです。

(以前、Fusion Tablesの認証情報の作成方法で作成したclient_id.jsonと内容は異なります。)

Android Studioの左上のタブを「Project」googleに変更し、app-配下にダウンロードしたgoogle-services.jsonをドラッグします。

 

p.s.

google-services.jsonの内容を見ると確かに2つのclient_idがありました。Stack Overflowの記事と公式サイトの記事をもっと早く見ていたら(^^;ここから後もすんなりいかないんだよなー、きっと。

 

参照サイト:

New Google sign in Android - Stack Overflow

Start Integrating Google Sign-In into Your Android App  |  Google Sign-In for Android  |  Google Developers

 

エミュレータを日本語に変更する方法

一昨日、ようやくSignIn認証できたのですが、単純に成功したってだけで、本当に使用する方法として、まだまだです。今日は、ちょっとコーヒーブレイクで、adbコマンドを使用して、エミュレータの言語を日本語に変更してみました。手順は、以下です。

1.コマンドプロンプトを開く。

2.「adb shell」を実行し、adbのシェルを使用する。

3.setprop persist.sys.locale ja; stop; sleep 5 ; start

 

f:id:gaggit:20160918143756p:plain

3.で日本語(ja)に設定後、5秒後にエミュレータが再起動し、日本語に変わります。

f:id:gaggit:20160918143728p:plain

参照サイト:

Localizing with Resources | Android Developers

SignIn認証に成功

前回、メール認証に成功してから3週間も経過してしまいましたが、本日、SignIn認証に成功しました。下記の参照サイトの1つ目のサイトを参考にコーディングしました。参照サイト中のsign_out_disconnectに関連するコードがないので、sign_out_buttonに置き換えています(というか、間違いだと思われる。UpdateUIにあるのは4種類なので。。。)。また、レイアウトのxmlファイルがないので、自分で補いました。

1.activityの切り換えのコードを追加

MainとなるActivityと参照サイトのIdTokenActivityに以下を追加してます。また、IdTokenActivityの追加により、AndroidManifest.xmlにIdTokenActivityを追加しました。

1.AndroidManifest.xml

<activity
android:name=".IdTokenActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme">

2.MainのActivity

Super.onCreateの下に以下を追加する。

Intent intent = new Intent();
intent.setClassName("com.example.myapplication_test", "com.example.myapplication_test.IdTokenActivity");
this.startActivity(intent);

3.IdTokenActivity

setContentViewの下に以下を追加する。

Intent intent = this.getIntent();

2.バグ修正

このままでは、SignIn認証エラーとなり認証に失敗し、onActivityResultの引数dataのdata.getExtras()に以下のエラーが出力されます。

「{statusCode=unknown status code:12501, resolution=null}」

2つ目の参照サイトから、GoogleSiginInOptionsを修正することにより、SignInに成功しました。

・修正前

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
   .requestIdToken(getString(R.string.server_client_id))
   .requestEmail()
   .build();

・修正後

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestScopes(new Scope(Scopes.PLUS_LOGIN))
.requestScopes(new Scope(Scopes.PLUS_ME))
.build();

 実行すると、アカウント選択画面が表示され、アカウントをクリック後、以下の画面が表示されます。

f:id:gaggit:20160916232430p:plain

「ALLOW」をクリックすると、「SignedIn」と表示されました。

f:id:gaggit:20160916232532p:plain

SignIn認証はクリアしたのですが、FusionTablesの認証は、まだです。道のりはもう少しといったところでしょうか。

 

参照サイト

google-services/IdTokenActivity.java at master · googlesamples/google-services · GitHub

New Google sign in Android - Stack Overflow

Nexus5 タッチパネルが効かない ボタンが勝手に押される。

最近、雨が多いですね。スマホは、Nexus5とFone2Laserを使用していますが、本日、雨の中から家に帰ってNexus5を使用しようとすると、一部タッチパネルが効かなくなり、押してもいないボタンが勝手に押されるようになりました。水滴を拭き取ってもだめでしたが、数時間、自然乾燥させたら元に戻りました。傘を差しながら雨の中で使用したことは何度かありますが、こんな現象は初めてだったので、すこし焦りました。