Android Studioをバージョンアップすると、バージョンアップ前に作成していたプロジェクトのビルドでエラーが発生することがあります。
これは、Android Studioのバージョンアップの際に、ビルドシステムのGradleもバージョンアップされているからです。
今回は、以下のようなエラーが発生した時の対処方法です。
【エラー】
Gradle x.x requires Android Gradle plugin x.x.x (or newer) but project is using version x.x.x.
Please use Android Gradle plugin x.x.x or newer.
Fix plugin version and sync project
【対処】
メッセージにあるリンク箇所(Fix plugin version and sync project)をクリックするとAndroid Gradle pluginのクラスパス設定が修正されて、プロジェクトの同期が再実施されます。
Android Gradle pluginのクラスパス設定は、build.gradleのdependenciesに記載されています。
-----
dependencies {
classpath 'com.android.tools.build:gradle:1.3.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
-----
上記は、Android Gradle plugin 1.3.0が設定されている例です。
いいね!Androidアプリ
みんなの「いいね!」を目指して、Androidアプリを作成しています。
2015年10月4日日曜日
2015年2月18日水曜日
android.app.Fragmentとandroid.support.v4.app.Fragmentの共存で起こるエラー
今回は、android.app.Fragmentとandroid.support.v4.app.Fragmentの共存で起こるエラーについてです。
例えば、以下のようなソースでエラーとなる場合があります。
[ソース]
public void onNavigationDrawerItemSelected(int position) {
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.container, MyFragment.newInstance(position))
.commit();
}
[エラー]
replace(int, android.support.v4.app.Fragment) in FragmentTransaction cannot be applied to (int, XXX.MyFragment)
これは、getSupportFragmentManager()で取得したFragmentManagerのreplace()メソッドに於いて、android.app.FragmentによるMyFragmentクラスのインスタンスを引数にとることは出来ないというエラーです。
対策として、
この場合、MyFragmentクラスに於けるインポートを
import android.app.Fragment;
から
import android.support.v4.app.Fragment;
に変更すれば解決します。
例えば、以下のようなソースでエラーとなる場合があります。
[ソース]
public void onNavigationDrawerItemSelected(int position) {
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.container, MyFragment.newInstance(position))
.commit();
}
[エラー]
replace(int, android.support.v4.app.Fragment) in FragmentTransaction cannot be applied to (int, XXX.MyFragment)
これは、getSupportFragmentManager()で取得したFragmentManagerのreplace()メソッドに於いて、android.app.FragmentによるMyFragmentクラスのインスタンスを引数にとることは出来ないというエラーです。
対策として、
この場合、MyFragmentクラスに於けるインポートを
import android.app.Fragment;
から
import android.support.v4.app.Fragment;
に変更すれば解決します。
2015年2月14日土曜日
Android Studioのバージョンアップに伴うビルドエラー(Gradle DSL method not found:'runProguard()'...)
Android Studioをバージョンアップすると、バージョンアップ前に作成していたプロジェクトのビルドでエラーが発生することがあります。
これは、Android Studioのバージョンアップの際に、ビルドシステムのGradleもバージョンアップされているからです。
今回は、以下のようなエラーが発生した時の対処方法です。
【エラー】
■Messages Gradle Sync
Gradle DSL method not found:'runProguard()'
possible causes:
Error:(16,0)
・The project 'プロジェクト名' may be useing a version of Gradle thet does not contain the method.
・The build file may be missing a Gradle plugin.
【対処】
app>build.gradle を以下の通り修正します。
■修正前
buildTypes {
release {
runProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
■修正後
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
これは、Android Studioのバージョンアップの際に、ビルドシステムのGradleもバージョンアップされているからです。
今回は、以下のようなエラーが発生した時の対処方法です。
【エラー】
■Messages Gradle Sync
Gradle DSL method not found:'runProguard()'
possible causes:
Error:(16,0)
・The project 'プロジェクト名' may be useing a version of Gradle thet does not contain the method.
・The build file may be missing a Gradle plugin.
【対処】
app>build.gradle を以下の通り修正します。
■修正前
buildTypes {
release {
runProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
■修正後
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
Android Studioのバージョンアップに伴うビルドエラー(If using the gradle wrapper, try editing the distributionUrl...)
Android Studioをバージョンアップすると、バージョンアップ前に作成していたプロジェクトのビルドでエラーが発生することがあります。
これは、Android Studioのバージョンアップの際に、ビルドシステムのGradleもバージョンアップされているからです。
今回は、以下のようなエラーが発生した時の対処方法です。
【エラー】
■Messages Gradle Sync
Failed to sync Gradle project 'プロジェクト名'
Gradle version 2.2 is required. Current version is 2.1. If using the gradle wrapper, try editing the distributionUrl in C:\パス\AndroidStudioProjects\プロジェクト名\gradle\wrapper\gradle-2.2-all.zip
Error: Please fix the project's Gradle settings.
【対処】
gradle>wrapper>gradle-wrapper.properties を以下の通り修正します。
■修正前
distributionUrl=https\://services.gradle.org/distributions/gradle-2.1-all.zip
■修正後
distributionUrl=https\://services.gradle.org/distributions/gradle-2.2-all.zip
これは、Android Studioのバージョンアップの際に、ビルドシステムのGradleもバージョンアップされているからです。
今回は、以下のようなエラーが発生した時の対処方法です。
【エラー】
■Messages Gradle Sync
Failed to sync Gradle project 'プロジェクト名'
Gradle version 2.2 is required. Current version is 2.1. If using the gradle wrapper, try editing the distributionUrl in C:\パス\AndroidStudioProjects\プロジェクト名\gradle\wrapper\gradle-2.2-all.zip
Error: Please fix the project's Gradle settings.
【対処】
gradle>wrapper>gradle-wrapper.properties を以下の通り修正します。
■修正前
distributionUrl=https\://services.gradle.org/distributions/gradle-2.1-all.zip
■修正後
distributionUrl=https\://services.gradle.org/distributions/gradle-2.2-all.zip
Android Studioのバージョンアップに伴うビルドエラー(The project is using an unsupported version...)
Android Studioをバージョンアップすると、バージョンアップ前に作成していたプロジェクトのビルドでエラーが発生することがあります。
これは、Android Studioのバージョンアップの際に、ビルドシステムのGradleもバージョンアップされているからです。
今回は、以下のようなエラーが発生した時の対処方法です。
【エラー】
■Messages Gradle Sync
Failed to sync Gradle project 'プロジェクト名'
Error:
The project is using an unsupported version of the Android Gradle plug-in(0.13.2). The recommended version is 1.0.1.
【対処】
gbuild.gradleを以下の通り修正します。
■修正前
dependencies {
classpath 'com.android.tools.build:gradle:0.13.2'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
■修正後
dependencies {
classpath 'com.android.tools.build:gradle:1.0.1'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
これは、Android Studioのバージョンアップの際に、ビルドシステムのGradleもバージョンアップされているからです。
今回は、以下のようなエラーが発生した時の対処方法です。
【エラー】
■Messages Gradle Sync
Failed to sync Gradle project 'プロジェクト名'
Error:
The project is using an unsupported version of the Android Gradle plug-in(0.13.2). The recommended version is 1.0.1.
【対処】
gbuild.gradleを以下の通り修正します。
■修正前
dependencies {
classpath 'com.android.tools.build:gradle:0.13.2'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
■修正後
dependencies {
classpath 'com.android.tools.build:gradle:1.0.1'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
2015年2月9日月曜日
FragmentとActivityの連携について
WEB上でFragmentについて検索すると、関連する内容がたくさんヒットするのですが、残念なことに、日本語による関連サイトが余りにも少ないのが現状です。
そこで、今回は、今更の感はございますが、Fragmentについて、その中でも特に情報が少ないFragmentとActivityの連携についてまとめてみました。
■Fragmentから特定のActivityと連携する場合
①FragmentからActionBarを操作する
まず、FragmentクラスのgetActivity()メソッドによって、Fragmentが関連付けられているActivityのインスタンスを取得します。
public final Activity getActivity ()
--------------------
[Returns]
Return the Activity this fragment is currently associated with.
--------------------
次に、ActivityクラスのgetActionBar ()メソッドによって、ActionBarのインスタンスを取得します。
public ActionBar getActionBar ()
--------------------
[Returns]
The Activity's ActionBar, or null if it does not have one.
--------------------
以下のようなメソッドを用意しておくと便利です。
private ActionBar getActionBar() {
return getActivity().getActionBar();
}
ActionBarクラスのメソッドで、以下のような操作が出来ます。
・アプリアイコンをHomeボタンとする。
actionBar.setHomeButtonEnabled(true);
・アプリアイコンの左に戻るアイコンを追加する。
actionBar.setDisplayHomeAsUpEnabled(true);
・タイトル(サブタイトル)を表示する。
actionBar.setDisplayShowTitleEnabled(true);
・タイトルを設定する。
actionBar.setTitle(int resId);
・サブタイトルを設定する。
actionBar.setSubtitle(int resId);
②FragmentからActivityのメソッドを呼び出す
onAttachメソッドで取得したインスタンスは、Fragmentが関連付けられているActivityのインスタンスなので、このインスタンスからメソッドを呼び出す。
public class MainActivity extends Activity {
---
public void onSectionAttached(int number) {
switch (number) {
case 1:
mTitle = getString(R.string.title_section1);
break;
case 2:
mTitle = getString(R.string.title_section2);
break;
case 3:
mTitle = getString(R.string.title_section3);
break;
}
}
---
public static class PlaceholderFragment extends Fragment {
----
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
// MainActivity型でキャストして、onSectionAttachedメソッドを呼び出す
((MainActivity) activity).onSectionAttached(
getArguments().getInt(ARG_SECTION_NUMBER));
}
}
}
■Fragmentから任意のActivityと連携する場合
Activityにインタフェースでメソッドを実装して、このメソッドをFragmentから呼び出すことで連携することが出来ます。
public class HeadlinesFragment extends ListFragment {
// OnHeadlineSelectedListenerインタフェース型のメンバ変数
private OnHeadlineSelectedListener mCallback;
// OnHeadlineSelectedListenerインタフェースの宣言
public interface OnHeadlineSelectedListener {
// onArticleSelectedメソッドの宣言
public void onArticleSelected(int position);
}
---
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
// OnHeadlineSelectedListenerインタフェース型でキャスト
mCallback = (OnHeadlineSelectedListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString()
+ " must implement OnHeadlineSelectedListener");
}
}
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
// 実装先のメソッドを呼び出す
mCallback.onArticleSelected(position);
// Set the item as checked to be highlighted when in two-pane layout
getListView().setItemChecked(position, true);
}
}
public class MainActivity extends FragmentActivity implements HeadlinesFragment.OnHeadlineSelectedListener {
---
// onArticleSelectedメソッドの実装
public void onArticleSelected(int position) {
---
}
}
参考サイト:http://developer.android.com/training/basics/fragments/communicating.html
そこで、今回は、今更の感はございますが、Fragmentについて、その中でも特に情報が少ないFragmentとActivityの連携についてまとめてみました。
■Fragmentから特定のActivityと連携する場合
①FragmentからActionBarを操作する
まず、FragmentクラスのgetActivity()メソッドによって、Fragmentが関連付けられているActivityのインスタンスを取得します。
public final Activity getActivity ()
--------------------
[Returns]
Return the Activity this fragment is currently associated with.
--------------------
次に、ActivityクラスのgetActionBar ()メソッドによって、ActionBarのインスタンスを取得します。
public ActionBar getActionBar ()
--------------------
[Returns]
The Activity's ActionBar, or null if it does not have one.
--------------------
以下のようなメソッドを用意しておくと便利です。
private ActionBar getActionBar() {
return getActivity().getActionBar();
}
ActionBarクラスのメソッドで、以下のような操作が出来ます。
・アプリアイコンをHomeボタンとする。
actionBar.setHomeButtonEnabled(true);
・アプリアイコンの左に戻るアイコンを追加する。
actionBar.setDisplayHomeAsUpEnabled(true);
・タイトル(サブタイトル)を表示する。
actionBar.setDisplayShowTitleEnabled(true);
・タイトルを設定する。
actionBar.setTitle(int resId);
・サブタイトルを設定する。
actionBar.setSubtitle(int resId);
②FragmentからActivityのメソッドを呼び出す
onAttachメソッドで取得したインスタンスは、Fragmentが関連付けられているActivityのインスタンスなので、このインスタンスからメソッドを呼び出す。
public class MainActivity extends Activity {
---
public void onSectionAttached(int number) {
switch (number) {
case 1:
mTitle = getString(R.string.title_section1);
break;
case 2:
mTitle = getString(R.string.title_section2);
break;
case 3:
mTitle = getString(R.string.title_section3);
break;
}
}
---
public static class PlaceholderFragment extends Fragment {
----
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
// MainActivity型でキャストして、onSectionAttachedメソッドを呼び出す
((MainActivity) activity).onSectionAttached(
getArguments().getInt(ARG_SECTION_NUMBER));
}
}
}
■Fragmentから任意のActivityと連携する場合
Activityにインタフェースでメソッドを実装して、このメソッドをFragmentから呼び出すことで連携することが出来ます。
public class HeadlinesFragment extends ListFragment {
// OnHeadlineSelectedListenerインタフェース型のメンバ変数
private OnHeadlineSelectedListener mCallback;
// OnHeadlineSelectedListenerインタフェースの宣言
public interface OnHeadlineSelectedListener {
// onArticleSelectedメソッドの宣言
public void onArticleSelected(int position);
}
---
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
// OnHeadlineSelectedListenerインタフェース型でキャスト
mCallback = (OnHeadlineSelectedListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString()
+ " must implement OnHeadlineSelectedListener");
}
}
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
// 実装先のメソッドを呼び出す
mCallback.onArticleSelected(position);
// Set the item as checked to be highlighted when in two-pane layout
getListView().setItemChecked(position, true);
}
}
public class MainActivity extends FragmentActivity implements HeadlinesFragment.OnHeadlineSelectedListener {
---
// onArticleSelectedメソッドの実装
public void onArticleSelected(int position) {
---
}
}
参考サイト:http://developer.android.com/training/basics/fragments/communicating.html
2014年12月9日火曜日
【新作】分数電卓
分数電卓は、書式通りに入力して結果を表示することが出来ます。
だから、誰にでも簡単に利用することが出来ます。
日常の分数計算にはもちろん、お子様の算数の勉強にもお役立て頂ければ幸いです。
【Google Play でダウンロードする】
登録:
投稿 (Atom)