class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) fragmentTransaction { ft -> ft.add(R.id.fragment_container, MainFragment()) } } fun AppCompatActivity.fragmentTransaction(transaction: (ft: FragmentTransaction) -> Unit) { val ft = supportFragmentManager.beginTransaction() transaction(ft) ft.commit() } }
2015年11月8日日曜日
KotlinでFragmentTransaction用の拡張関数
2015年10月17日土曜日
Pythonでユニットテスト
unittest.TestCaseを継承したクラスがあるファイルの階層、もしくはそのファイルがサブディレクトリにある状態で、
コマンドを実行すると、テストが実行される。
NumberpickerやDatePicker,TimePickerでキーボードの非表示設定
NumberpickerやDatePicker,TimePickerでソフトウェアキーボードがでないように設定するには、
http://developer.android.com/reference/android/view/ViewGroup.html#setDescendantFocusability(int)
http://developer.android.com/reference/android/view/ViewGroup.html#FOCUS_BLOCK_DESCENDANTS
ViewGroup#setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);を設定して、ピッカーにフォーカスがいかないように設定することによって、ピッカーをタップしてもキーボードが表示されなくなる。
http://developer.android.com/reference/android/view/ViewGroup.html#setDescendantFocusability(int)
http://developer.android.com/reference/android/view/ViewGroup.html#FOCUS_BLOCK_DESCENDANTS
ActionBarの戻る矢印の色を変更
// 矢印の色変更 final Drawable upArrow = getResources().getDrawable(R.drawable.abc_ic_ab_back_mtrl_am_alpha); upArrow.setColorFilter(getResources().getColor(R.color.drawer_arrows), PorterDuff.Mode.SRC_ATOP); getSupportActionBar().setHomeAsUpIndicator(upArrow);
フォーカスが外れたとき、ソフトキーボードを非表示にするEditText
public class AutoHideKeyboardEditText extends EditText { protected boolean mHideKeyboardEnable = true; public AutoHideKeyboardEditText(Context context) { super(context); } public AutoHideKeyboardEditText(Context context, AttributeSet attrs) { super(context, attrs); } public void setHideKeyboardEnable(final boolean enabled) { mHideKeyboardEnable = enabled; } @Override protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) { super.onFocusChanged(focused, direction, previouslyFocusedRect); if (mHideKeyboardEnable && !focused) { // ソフトキーボードを非表示にする final InputMethodManager imm = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); } } }
ブラウザ起動時に、ブラウザアプリ選択を表示しない起動処理
public static void openBrowser(final Context context, final String url) { try { // 標準ブラウザ起動 final Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); intent.setClassName("com.android.browser", "com.android.browser.BrowserActivity"); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent); } catch (ActivityNotFoundException e) { try { // chrome起動 final Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); intent.setClassName("com.android.chrome", "com.google.android.apps.chrome.Main"); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent); } catch (ActivityNotFoundException e2) { // 暗黙的intentでブラウザ起動 final Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent); } } }
アプリがインストール済みか調べるとき
public boolean isInstalled(final Context context) { final Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("scheme:")); final ListresolveInfos = context.getApplicationContext() .getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY); return (resolveInfos != null && !resolveInfos.isEmpty()); }
2015年8月20日木曜日
DjangoのRequestContextでkey名をuserにすると、なぜかhtml上で表示されない
DjangoのRequestContextでkey名をuserにすると、なぜかhtml上で表示されない
↓
key名を他の名前にすると表示されました。
↓
key名を他の名前にすると表示されました。
2015年8月15日土曜日
Python3で既存excelファイルの修正
やりたかったこと
テンプレート用のexcelファイルがあり、任意のデータを追加して新たにexcelファイルを生成する使用したライブラリ
openpyxl2.3.0-b1Python2.6, 2.7, 3.3, 3.4
(License: MIT/Expat)
使い方
https://openpyxl.readthedocs.org/en/latest/usage.html#write-a-workbook-from-xltx-as-xlsx使用例
# -*- coding: utf-8 -*- import openpyxl if __name__ == "__main__": # openpyxl wb = openpyxl.load_workbook('template.xlsx') #xlsは非サポート。テンプレートファイルはxlsxファイルを用意 ws = wb.worksheets[0] ws['D10'] = 'ああああ' ws['D12'] = 'test' ws['E12'] = 0.0208333333 wb.save('201508.xls') #出力はxlsでも大丈夫そう
2015年8月14日金曜日
新しくPythonプロジェクト作るとき用メモ
やること
$ django-admin startproject (プロジェクト名)
困ったときは、Django girls のチュートリアルを見る
http://tutorial.djangogirls.org/en/django_start_project/index.html
- PyCharmで新規プロジェクト作成
- django-adminで新規djangoプロジェクト作成
$ django-admin startproject (プロジェクト名)
困ったときは、Django girls のチュートリアルを見る
http://tutorial.djangogirls.org/en/django_start_project/index.html
2015年6月30日火曜日
Ubuntu15.04にAndroidStudio1.2.2を入れてみた
ほぼまっさらなUbuntu15.04にAndroidStudio1.2.2を入れました。
去年の様子
→ Ubuntu14.04にAndroid Studio入れてみた
→ Android StudioをUbuntuのランチャーから起動できるように設定する
の「DOWNLOAD ANDROID STUDIO FOR LINUX」からダウンロード
圧縮ファイルを好きな場所に解凍する。
今回は/home/ysakaguchi/Androidに解凍
https://developer.android.com/sdk/index.html#Other
の「SDK Tools Only」から「android-sdk_r24.3.3-linux.tgz」ダウンロード
好きな場所に解凍する
今回は/home/ysakaguchi/Androidに解凍
インストールできているか確認
java -version
セットアップの案内のウィンドウが開くので、閉じます。
もう二度と開かなくていい場合は、「Do not re-run the setup wizard」を選択し「OK」
「Configure」>「Project Defaults」>「Project Structure」で「Android SDK location」を設定
ダウンロードしたSDK Toolsの解凍先を設定する。
今回は
/home/ysakaguchi/Android/android-sdk-linux
に設定
Configureに戻って「SDK Manager」を開くことができれば、OK

「Android Studio.desktop」の名前で保存
「Android Studio.desktop」ファイルを右クリック > プロパティ > アクセス権 > 実行:の「プログラムとして実行可能」にチェックをつける
これで、Android Studio.desktopファイルをダブルクリックするとAndroid Studioが起動する
起動すると、ランチャーにアイコンが表示されるので、そこから「launcherに登録」ができる
起動しないときは/home/ysakaguchi/Android/android-studio/bin/studio.shファイルを右クリック > プロパティ > アクセス権 > 実行:の「プログラムとして実行可能」にチェックが入っているか確認する。
去年の様子
→ Ubuntu14.04にAndroid Studio入れてみた
→ Android StudioをUbuntuのランチャーから起動できるように設定する
AndroidStudioの環境設備
AndroidStudioのダウンロード
https://developer.android.com/sdk/index.htmlの「DOWNLOAD ANDROID STUDIO FOR LINUX」からダウンロード
圧縮ファイルを好きな場所に解凍する。
今回は/home/ysakaguchi/Androidに解凍
SDK Toolsをダウンロード
https://developer.android.com/sdk/index.html#Other
の「SDK Tools Only」から「android-sdk_r24.3.3-linux.tgz」ダウンロード
好きな場所に解凍する
今回は/home/ysakaguchi/Androidに解凍
JDKをインストール
sudo apt-get install openjdk-7-jdkインストールできているか確認
java -version
必要なlibファイルをインストール
sudo apt-get install libc6-i386 lib32stdc++6 lib32gcc1 lib32ncurses5 zlib1g lib32z1環境設備が終わったら、AndroidStudioにSDKのパスを設定する
AndroidStudioを起動
セットアップの案内のウィンドウが開くので、閉じます。
もう二度と開かなくていい場合は、「Do not re-run the setup wizard」を選択し「OK」
SDKのパス設定
SDKのパス設定閉じると、またウィンドウが開くので、そこで「Configure」>「Project Defaults」>「Project Structure」で「Android SDK location」を設定
ダウンロードしたSDK Toolsの解凍先を設定する。
今回は
/home/ysakaguchi/Android/android-sdk-linux
に設定
Configureに戻って「SDK Manager」を開くことができれば、OK
他の設定
gitをインストール
sudo apt-get install git
ランチャーから起動設定
適当なテキストエディタでテキストファイルを新規作成し、次の記述をコピペ[Desktop Entry] Encoding=UTF-8 Version=1.0 Type=Application Name=Android Studio Icon=/home/ysakaguchi/Android/android-studio/bin/studio.ico Path=/home/ysakaguchi/Android/android-studio/bin Exec=/home/ysakaguchi/Android/android-studio/bin/studio.sh
「Android Studio.desktop」の名前で保存
「Android Studio.desktop」ファイルを右クリック > プロパティ > アクセス権 > 実行:の「プログラムとして実行可能」にチェックをつける
これで、Android Studio.desktopファイルをダブルクリックするとAndroid Studioが起動する
起動すると、ランチャーにアイコンが表示されるので、そこから「launcherに登録」ができる
起動しないときは/home/ysakaguchi/Android/android-studio/bin/studio.shファイルを右クリック > プロパティ > アクセス権 > 実行:の「プログラムとして実行可能」にチェックが入っているか確認する。
2015年6月21日日曜日
X1 Carbon 3rdにUbuntu入れてトラブったことと解決方法
長時間スリープから復帰できない問題
BIOSからRapid Startを無効F12を押したままPCを起動し、BIOSを起動する
App Menu > Setip > Config > Power > Intel(R) Rapid Start Technologe > Disabled
いままでスリープ3時間後にモードが切り替わってたらしい
Wi-fiがよく切れる問題
以下のコマンドを実行sudo su echo "options iwlwifi 11n_disable=1" >> /etc/modprobe.d/iwlwifi.conf update-initramfs -u reboot参考:http://askubuntu.com/questions/599477/lenovo-x1-carbon-2015-3rd-gen-20-bs-trackpoint-clickpad-and-wifi
2015年6月18日木曜日
さくらVPSでしたこと雑なメモ
VPSサーバの設定
Ubuntu14.04をインストールssh ユーザー名@IPアドレス
nginx
読み方は「えんじんえっくす」
sudo apt-get install nginx
/etc/nginx/sites-available/defaultに
https://github.com/narusemotoki/vagrant_django/blob/master/vagrant/templates/nginx_default
の内容を上書き保存(nginxがローカルホストにアクセスする設定に変更される)
location /static/ { root /srv/; }は自分にあった記述に変更する。
変更前に一応ファイルのバックアップをどこかに残す。
今回は次で設定
location /static/ { root /home/ユーザー名/app/karuta/Karuta/; }↑
staticがある場所を指定。
また違う場所の指定を追加したいときはserver{}単位で追記する。
変更が完了したら
sudo service nginx configtest
で問題ないか確認し
sudo service nginx restart
を行う
ドメインのゾーン編集(2015/7/13変更)
参考:https://help.sakura.ad.jp/app/answers/detail/a_id/2087http://www.prostsite-admindocs.com/mail/mail-server
エントリ名を「*」にすると「.example.com」の前にどんな文字列が来ても大丈夫になる
その他
pip3 freezeで状態チェック足りないパッケージをインストールさせる
pip3がいなかったので
sudo apt-get install python3-pip
でインストール
今回は
sudo pip3 install Django==1.8.2
を実行
2015年5月13日水曜日
NotificationのPendingIntentで注意すること
- PendingIntent#getActivity
- PendingIntent#getService
- PendingIntent#getBroadcast
の第四引数は「PendingIntent.FLAG_CANCEL_CURRENT」を指定する。
理由
PendingIntent.FLAG_UPDATE_CURRENT を指定していると、一部機種でうまく動作しないことがあるため
不具合の再現手順
- PendingIntent.FLAG_UPDATE_CURRENTを指定したNotificationを行う
- アプリをアンインストール
- 同一アプリを再インストール
- 1.と同様のNotificationを行う
上記手順を行うと、ステータスバーにある通知をタップしてもgetActivityで指定しているActivityが起動されないなどの不具合が一部端末で発生する
(現状、Xperia Z2 SO-03F確認)
原因の予想
FLAG_UPDATE_CURRENT は、「存在していればそれを使う。新しい設定で置き換えない。」動作を行うフラグのため、
アンインストール前の同一PendingIntentのNotificationが残っており、アンインストール前の情報のアプリを起動しようとしているためだと思われます。
PendingIntent.FLAG_CANCEL_CURRENTを指定すると、「現在設定されているものがあれば、それをキャンセルして新しい設定を行う。」ので、正常に動作されました。
2015年4月15日水曜日
git checkout を間違って実行したときに行った対処方法(Android Studio環境に限る)
間違ってgit checkout :/ を実行し、ローカルの変更分が無くなったときに行った対処になります。
※本来、作業するときは、
gitは細かくコミットするべき!コミット内容はプッシュ前に整える!
の考えで行うべきです。
Android StudioのLocal Historyから復元
作業した環境
OS:OSX 10.10.2 Yosemite
バージョン:Android Studio 1.1
作業手順
他、いろいろと対処方法
2015年3月17日火曜日
build.gradleにFacebookSDKを追加
ここでセントラルリポジトリ内のFacebookSDKの最新バージョンをチェックする。
build.gradleに下記を追加
repositories { … mavenCentral() … } dependencies { … compile 'com.facebook.android:facebook-android-sdk:3.23.1' … }
2015年3月16日月曜日
not available for offline mode
プロジェクトのgradleのdependenciesに新たにライブラリを追加したとき、
Failed to resolve:~
や
not available for offline mode
と警告が出たら
Android Studio > Preference > GradleのOffline workのチェックを外して、オフラインモードを解除して、再度ビルドしてみる
2015年3月8日日曜日
EditTextで絵文字を含む文字列の文字数制限処理
絵文字を含む文字列の文字数制限で少しハマりました。
最終的に以下のコードで対応しました。
そのため、最大10文字と設定していても、絵文字を含む文字列だと5〜9文字までしか入力できないEditTextになってしまいます。
最終的に以下のコードで対応しました。
final int MAX_TEXT_LENGTH = 10; final EditText editText = (EditText) findViewById(R.id.edit_text); editText.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void afterTextChanged(Editable s) { if (unfixInput(s)) { return; } final String str = s.toString(); final String adjustedText = adjustText(str); if (!str.equals(adjustedText)) { editText.setText(adjustedText); editText.setSelection(editText.getText().length()); Toast.makeText(getApplicationContext(), String.format("最大%d文字です", MAX_TEXT_LENGTH), Toast.LENGTH_SHORT).show(); return; } // TODO 内容保存処理 } /** * 入力確定前の文字があるときtrue */ private boolean unfixInput(final Editable s) { Object[] spanned = s.getSpans(0, s.length(), Object.class); if (spanned != null) { for (Object obj : spanned) { if ((s.getSpanFlags(obj) & Spanned.SPAN_COMPOSING) == Spanned.SPAN_COMPOSING) { return true; } } } return false; } /** * 文字列の調整 */ private String adjustText(final String str) { if (MAX_TEXT_LENGTH < str.codePointCount(0, str.length())) { // 文字数は、コードポイントで比較 return adjustText(str.substring(0, (str.length() - 1))); } return str; } });
ハマった原因
xmlのEditTextにandroid:maxLength="10"と設定しても、 文字数のカウントがサロゲートの文字が配慮されておらず、絵文字など、文字コードがサロゲートの場合、1文字で2文字と認識されてしまいます。
そのため、最大10文字と設定していても、絵文字を含む文字列だと5〜9文字までしか入力できないEditTextになってしまいます。
対処方法
- EditTextのmaxLengthは使用しない
- 文字数のカウントは、String#codePointCountメソッドを使用する
コードポイントとは
コードポイントとは、Unicodeで1文字分のコードを示す言い方。Javaではコードポイントはint型で表す。(引用元:http://www.ne.jp/asahi/hishidama/home/tech/java/string.html)
他、参考
- Android/EditTextでIMEの未確定文字列が確定された瞬間(のフォーク)
- https://groups.google.com/forum/#!topic/android-group-japan/Aww32JZ28uQ
2015年3月4日水曜日
Pythonのlintチェック
flake8をインストール
sudo pip3 install flake8flake8の実行
チェックしたいアプリのディレクトリに移動して、次のコマンドを実行(「.」を忘れずに)$ flake8 .
こんな感じのメッセージが出てくるので、該当箇所を正しい構文になおしていくとよい。
./Karuta/models.py:14:28: E261 at least two spaces before inline comment
./Karuta/wsgi.py:13:1: E402 module level import not at top of file
./Karuta/views.py:9:75: W292 no newline at end of file
./Karuta/settings.py:86:57: W292 no newline at end of file
個人的課題
pep8について知るDBのバックアップ
SQLiteの中身をdumpする
$ python3 ./manage.py dumpdata > dump.jsondump内容をSQLiteに反映させる
$ python3 ./manage.py loaddata dump.json
dump内容の反映は、いったんDBをクリアにして反映された状態になる。
2015年3月2日月曜日
DjangoでSqliteのDB作成
- __init__.pyがあるディレクトリ内でmodels.pyを作成
- models.pyにテーブル定義を書く
- 同じディレクトリ内にあるsettings.pyにアプリケーション情報追加
- コマンドでsyncdbを実行
models.pyにテーブル定義を書く
例class Karuta(models.Model):
kaminoku = models.TextField()
kaminoku_ruby = models.TextField()
shimonoku = models.TextField()
shimonoku_ruby = models.TextField()
kimarizi = models.TextField()
class Meta:
db_table = "karuta" # これを書かないと「Karuta」テーブルが作成される
同じディレクトリ内にあるsettings.pyにアプリケーション情報追加
INSTALLED_APPSにプロジェクト名(今回はKaruta)を追加INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'Karuta', # 自分のアプリケーション情報を追加
)
コマンドでsyncdbを実行
python3 ./manage.py syncdbでDBにmodels.pyで定義したテーブルが作成される
You have installed Django's auth system, and don't have any superusers defined.
Would you like to create one now? (yes/no)
は、djangoのスーパーユーザーを追加するかどうかの質問なので、noで大丈夫
PyCharmで最初にする設定
- 行番号表示
- ファイル新規作成で自動記述されるauthorの削除
- gitと連携
行番号表示
File > Editor > General > Appearance > Show line numberにチェックファイル新規作成で自動記述されるauthorの削除
__author__ = '(ユーザー名)'が初期で記入されないようにする方法
File > Editor > File and Code Templatesの
Templatesタブにある「Python Script」と「Python Unit Test」の設定を変更
gitと連携
VCS > Enable Version Control Integration...でgitを選択
2015年3月1日日曜日
djangoでViewを作る
Viewとは
web上で見える部分の定義やること
- __init__.pyとかがあるディレクトリ内でviews.pyを作成
- 同じディレクトリ内のurls.pyの修正
- views.pyにwebで表示したいものを書く
urls.pyの修正
# url(r'^$', 'Karuta.views.home', name='home'),
↓
url(r'^$', 'Karuta.views.home', name='home'),
コメントアウトを解除
views.pyにwebで表示したいものを書く
例:hello worldの出力
import django.shortcuts
def home(name):
return django.shortcuts.HttpResponse('hello world')
あとは、python3 ./manage.py runserverを行って、ブラウザでhttp://127.0.0.1:8000を開くと、hello worldが表示される
2015年2月28日土曜日
Djangoでhello world
環境
OS:Ubuntu14.04
Python 3.4.0
Pythonのバージョンを確認
Python2のバージョンを確認
pythonPython3のバージョンを確認
python3django1.7をインストールする
pipをインストール
sudo apt-get install python3-pipdjangoをインストール
sudo pip3 install djangodjangoのテストアプリケーションを作成する
プロジェクトを置く場所に移動
cd ~/python/testプロジェクトとアプリケーションの作成
django-admin startproject AppTestちなみに、ここで「django-admin startproject test」とやったら「CommandError: 'test' conflicts with the name of an existing Python module and cannot be used as a project name. Please try another name.」testは既存のPythonモジュールの名前と競合するから、プロジェクト名として使うことができません。違う名前つけてね。と怒られました。
アプリケーションの実行
cd AppTest/python3 ./manage.py runserver
runserverすると、アプリケーションが起動状態になります。
ブラウザでhttp://127.0.0.1:8000/を開くと起動中のアプリケーションの画面を見ることができます。
起動するとログに
You have unapplied migrations; your app may not work properly until they are applied.
Run 'python manage.py migrate' to apply them.
と赤文字があります。
未適用のマイグレーションがあります。適切に適用するまで、あなたのアプリケーションはおそらく動かないでしょう。
それらを適用するために'python manage.py migrate'を実行してください。
と書かれているので実行します。
python3 manage.py migrate
して、DBをマイグレート(データベースマイグレーション)してから
python3 ./manage.py runserver
するとログの赤文字が消えてます。
これは、djangoが内部で使用するテーブルが存在しないため、発生していました。
やっているといろいろ出てきた用語とか
- pypi … Pythonの公式が管理しているライブラリ集(個人が自由にライブラリを投稿できる場所)
- pip … パッケージマネージャーの一つ。Pythonのライブラリ集からライブラリを持ってきてくれる機能。デフォルトではpypiを見ている。URLを指定すれば、Githubなど、どこからでもライブラリを持ってこれる。
- Python2系と3系 … マシンに両方入っているとき「python」コマンドは2系が使われて「python3」コマンドは3系が使われる
- データーベースマイグレーション … DBのscheme(DBの定義)を最新の状態にすること
- djangoの基本的な考え方としては、1プロジェクトの中に複数のアプリケーションを持つことができる
Exception:
(省略)
PermissionError: [Errno 13] Permission denied: '/usr/local/lib/python3.4/dist-packages/Django-1.7.5.dist-info'
な感じで「Permisstion denied」と表示されたときは、実行したいことに権限が無いときに出るエラーなので、sudoをつけて実行する。
2015年1月30日金曜日
「パッケージファイルに正しく署名されていません」にハマった
署名したapkをPlayストアにアップしたら、一部の端末で
「パッケージファイルに正しく署名されていません」が表示され、インストール不可の状態になった。
開発環境
Android Studio : 1.0.1Ubuntu : 14.04
Java : OpenJDK1.7.0_65
原因
jarsignerの署名方式のデフォルト値がJDK6までとJDK7以降で変更されているようです。そのため、コマンド実行でJDK7を使用して署名を行ったため「パッケージファイルに正しく署名されていません」と表示される端末が発生しました。
参考:
・JDK7でAndroidアプリをリリースビルドする方法
・Androidアプリをリリースしたら「パッケージファイルに正しく署名されていません」と表示されて焦ったでござる
解決方法
build.gradleに署名用の記述追加(OpenJDK1.7.0_65のままで大丈夫でした)参考:AndroidStudio で APK の署名の設定を gradle.properties に記述する
gradle.propertiesに署名関連の設定を記述することで、
gitignoreでgradle.propertiesをgit管理の対象外にすると、署名ファイルのパスワードなどをアップせずに済むので、とても良いです。
gradle.propertiesに記述する
storeFile=/path/to/your.keystore
は、キーストアファイルのある場所が、/home/ysakaguchi/android/release/android.keystoreなら
storeFile=/android/release/android.keystore
となります。
確認方法
deploygateに修正したapkをアップして、JDK7のデフォルト署名方式だとうまくインストールできなかった端末で、再度インストールを試みたところうまくいくことも、先に確認できました。
「パッケージファイルに正しく署名されていません」が発生する端末は、どれなのかまでは絞れてないですが、SHARP端末はなるっぽい?かもです。
手元にIS05があったので、本件の現象が再現できました。
Xperiaは署名方式が違ってもダウンロードできていました。
手元にIS05があったので、本件の現象が再現できました。
Xperiaは署名方式が違ってもダウンロードできていました。
ちなみに今回の件が分かったアプリはこちらになります↓
2015年1月15日木曜日
appcompat-v7:21.0.3を追加したら、Attribute定義の競合エラーが発生し、ハマった
compile 'com.android.support:appcompat-v7:21.0.3’を追加したら、以下のエラーが出た
Error:Attribute "track" has already been defined
Error:Attribute "thumbTextPadding" has already been defined
Error:Attribute "switchTextAppearance" has already been defined
Error:Attribute "switchMinWidth" has already been defined
Error:Attribute "switchPadding" has already been defined
Error:Attribute "switchStyle" has already been defined
Error:Attribute "theme" has already been defined
原因
appcompat-v7のバージョン21以降で定義されているAttributeの名称と、
org.jraf:android-switch-backport(バージョン1.3.1)や
com.google.android.gms:play-services(バージョン4.4.52)で
定義されているAttributeの名称が競合しているため
対応手順
- org.jraf:android-switch-backportのバージョンを1.3.1→1.4.0にアップ
- com.google.android.gms:play-servicesのバージョンを4.4.52→6.1.71にアップ(6.1.+ならOK)
- compile 'com.android.support:appcompat-v7:21.0.3’を追加
1.org.jraf:android-switch-backportのバージョンを1.3.1→1.4.0にアップ
repositories {
jcenter()
}
(...)
dependencies {
compile 'org.jraf:android-switch-backport:1.4.0'
}
※buld.gradleのrepositoriesにjcenter()の追加も必要
※buld.gradleのrepositoriesにjcenter()の追加も必要
No resource found that matches the given name: attr 'switchStyle'.など、Attributeが定義されていません、とエラーが出るので、
エラーが発生している箇所に、"asb_"を追加する
(Attributeの定義名が変更されているので、使用箇所を変更)
例
<style name="MyTheme" parent="android:Theme.Holo.Light">
<item name="switchStyle">@style/MySwitch</item>
</style>
<style name="MyTheme" parent="android:Theme.Holo.Light">
<item name="switchStyle">@style/MySwitch</item>
</style>
<style name="MySwitch" parent="@style/Widget.Holo.Light.CompoundButton.Switch">
<item name="track">@drawable/switch_track_holo_light</item>
<item name="thumb">@drawable/switch_inner_holo_light</item>
<item name="switchTextAppearance">@style/common_switchTextAppearance</item>
<item name="switchMinWidth">0dip</item>
</style>
<item name="switchMinWidth">0dip</item>
</style>
↓
<style name="MyTheme" parent="android:Theme.Holo.Light">
<item name="asb_switchStyle">@style/MySwitch</item>
</style>
<item name="asb_switchStyle">@style/MySwitch</item>
</style>
<item name="asb_track">@drawable/switch_track_holo_light</item>
<item name="asb_thumb">@drawable/switch_inner_holo_light</item>
<item name="asb_switchTextAppearance">@style/common_switchTextAppearance</item>
<item name="asb_switchMinWidth">0dip</item>
</style>
<item name="asb_switchMinWidth">0dip</item>
</style>
2.com.google.android.gms:play-servicesのバージョンを4.4.52→6.1.71にアップ
dependencies {…
compile 'com.google.android.gms:play-services:6.1.71'
…
}
バージョン6.1以降ならOKです。参考
3.compile 'com.android.support:appcompat-v7:21.0.3’を追加
dependencies {…
compile 'com.android.support:appcompat-v7:21.0.3’
…
}
以上で、エラーが解決できました。
2015年1月8日木曜日
Nexus端末を手動でAndroid5.0にアップデート
今回は、Nexus 5(Android 4.4.4)を手動でAndroid5.0にアップデートしました。
他のNexus機でも、対応するOTAファイルをダウンロードして対処になります。
【Android端末】
他のNexus機でも、対応するOTAファイルをダウンロードして対処になります。
【Android端末】
Androidバージョン4.4.4
ビルド番号:KTU84P
【PC】
Mac OS X 10.9.5
主なアップデート手順の流れ
- OTAファイルをダウンロード
- Nexus 5のブートローダーを起動し、リカバリーモードへ
- OTAファイルをADBコマンド経由でNexus 5にインストール
- OTAファイルのインストールが完了したら、”reboot system now”で再起動
手順の参考1:http://androidlover.net/android-os/android-5-0-lollipop/nexus-update-lollipop-adb-sideload.html
アップデート手順と詳細
1. OTAファイルをダウンロード
今回は、Nexus 5のAndroid 4.4.4(KTU84P)をAndroid 5.0(LRX21O)にアップデートするため、Nexus 5(KTU84P)用のOTAファイルをダウンロードします。
ビルド番号が「KTU84P」のNexus 5のひとは、ここからダウンロード
他のビルド番号のNexus 5や他Nexus端末のOTAデータはここから探してダウンロード
2. Nexus 5のブートローダーを起動し、リカバリーモードへ
ブートローダーの起動
- Nexus 5をシャットダウン
- 電源ボタンとボリュームダウンボタンを数秒同時に押したままにする
(ボタン操作でブートローダーが起動しない場合、端末を起動し、PC側で"adb reboot bootloader”とADBコマンドを実行する)
ドロイド君が仰向けに倒れている画像が表示されれば、ブートローダー起動完了
リカバリーモードの起動
- ブートローダーの画面でボリュームダウンボタンを数回押して「Recovery mode」を選択
- 「Recovery mode」を選択した状態で電源ボタンを押すと、リカバリーモードが起動する
「コマンドが指定されていません。」のメッセージと仰向けに倒れてるドロイド君の上に赤いトライアングルのアイコンがある画像が表示されたら、
リカバリーモードの起動完了
3. OTAファイルをADBコマンド経由でNexus 5にインストール
- (Nexus 5側)ボリュームアップボタンと電源ボタンを同時に押してリカバリーメニューを表示
- Nexus 5とPCをUSBケーブルで接続
- (Nexus 5側)ボリュームボタンを操作し、リカバリーメニューの”apply update from ADB”にカーソルを合わせ、電源ボタンを押す
- (Nexus 5側)"Now send the package you want to apply to the device with "dab side load <filename>”...”の表示を確認
- (PC側)ターミナル(Windowsならコマンドプロンプト)で"adb sideload (手順1でダウンロードしたzipファイル)"とADBコマンドを実行
今回は
adb sideload /Users/username/Downloads/c1a33561be84a8a6a7d5a4c8e3463c4db9352ce6.signed-hammerhead-LRX21O-from-KTU84P.c1a33561.zip
と実行しました。
- (Nexus 5側)"sending: 'sideload’ "が100%になったあとの端末側の自動アップロードが、完了するまで待機
4. OTAファイルのインストールが完了したら、“reboot system now”で再起動
- (Nexus 5側)"install from ADB complete”と表示されたら自動アップロードの完了
- (Nexus 5側)ボリュームボタンを操作し、"reboot system now”にカーソルを合わせて電源ボタンを押すと、再起動開始
以上で、4.4.4のNexus 5を手動で5.0にする手順は完了です。
端末の起動が完了すると、通常のOSアップデートするときに毎度みる、アップグレード中のダイアログが表示されます。
アップグレードが完了すると、5.0が操作可能になります。
ちなみに、起動後すぐ「設定」>「端末情報」>「システムアップデート」で、5.0→5.0.1にアップデート出来ました。
登録:
投稿 (Atom)