2012年2月3日金曜日

【Google Music】Windows・フォルダでのアップロードでなぜか曲がアップデートできない場合の対処

GoogleMusic便利ですね。

ちなみに日本国内からは登録ができないようになっていますので、
なんらかの方法 で登録してください。

登録さえ済ませれば後は普通に使えます。


さて、Windowsの例ですが Google Music Manager でフォルダアップロードした場合に曲がアップロードされない場合があります。

原因は2通り。


1.既にアップロードされたことがある

その場合は、音楽ファイルを更新するか、アップロードした履歴を消すかしないといけません。

履歴を消す場合は、

C:\Documents and Settings\ \Local Settings\Application Data\Google\MusicManager\ServerDatabase.db

のファイルを消してください。次回アップロード時に自動で再生成されます。

2.ファイルの属性の問題

・NTFSで圧縮されている
・読み取り専用
・システムファイル
・隠しファイル

などになっている場合は解除してください。

・読み取り専用
・システムファイル
・隠しファイル
については、

attrib -h -s -r "M:Music\*.*" /S /D
をコマンドプロンプトで実行し、一括解除できます。
M:Music は音楽ファイルがフォルダパスにしてください。


[ 参考にさせて頂きました ]
ここ

2012年1月19日木曜日

【Android】Proguard で『error conversion to Dalvik format failed with error 1』

Android で Proguard を使い、リリース用APK作成時に出たエラー。
error conversion to Dalvik format failed with error 1

これの対処のため、検索していると

・EclipseのClean
・project.propertiesのSDK設定が合ってない
・SDKが2重に読み込まれている
・SDKの読込順序が間違っている
・Proguardのbatの命令を %1 %2 %3 のように変える
・Proguardを更新する(現在 4.7時点)

のように対処方法が書いてあったんですが、
全部試しても無理でした。

そしてもっと調べていたら英語のページに

http://stackoverflow.com/questions/6605971/android-sdk-tools-revision-12-has-problem-with-proguard-error-conversion-to

The only solution i've found to this problem is to change, in proguard.cfg

-optimizationpasses 5

to

-optimizationpasses 2

と書いてありました。
proguard.cfg を直してみるとそれでリリース用APKが作成できました。

調べると、 optimizationpasses は最適化回数らしく、
たぶんですが、proguard をどれぐらいの強さでかけるか、ということだと思います。

5 から 2 に落としたことでうまくAPKはできたのですが、
難読化は弱くなっているのでは、、と思います。

またわかればブログに書きたいと思います。

2011年12月17日土曜日

【Android】ウィジェットを確実に更新させる

Androidのウィジェットの内容を更新する場合、以下のように
updateAppWidgetとすると思います。

    private void updateAppWidget(Context context, RemoteViews remoteViews) {
        ComponentName thisWidget = new ComponentName(context, ClockAppWidgetProvider.class);
        AppWidgetManager manager = AppWidgetManager.getInstance(context);
        manager.updateAppWidget(thisWidget, remoteViews);
    }

ただ、複数配置した時など、各ウィジェットへ確実に更新が行われないようです。
特に時計ウィジェットだと顕著です。

その場合、

int[] appWidgetIds = manager.getAppWidgetIds(thisWidget);
for (int i : appWidgetIds) {
    manager.updateAppWidget(i, remoteViews);
}

のように各ウィジェットIDに対して更新するようにすると、確実に更新されるようです。

ただし、重いです。。何が原因で重いのかはまだわからないですが、、、

2011年12月16日金曜日

【Android】ダイアログで画面外を触った場合に閉じる

ダイアログは2種類ある。

通常の Dialog を継承しているもの。
Activityにtheme (@android:style/Theme.Dialog など) を設定してDialog風にしているもの。

指定の方法がそれぞれ違う。



1. 通常の Dialog を継承しているもの。
final AlertDialog dialog = alertinformation.create();
dialog.setCanceledOnTouchOutside(true);

Dialog に対して、setCanceledOnTouchOutside を設定してやるといい。

2. Activityにtheme (@android:style/Theme.Dialog など) を設定してDialog風にしているもの。
    // ウィンドウ外を触った場合、閉じる
    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        Rect dialogBounds = new Rect();
        getWindow().getDecorView().getHitRect(dialogBounds);

        if (!dialogBounds.contains((int) ev.getX(), (int) ev.getY())) {
            this.finish();
        }
        return super.dispatchTouchEvent(ev);
    }

イベントで画面外をタッチしている場合に画面を終了する。

2011年12月15日木曜日

【Android】Proguard使用時の注意点

Proguard使用時の注意

元々Android用ではないため、Javaのソースのみを難読化し、
XMLは無視する様子。

そのため、難読化しないクラスを除外設定しないといけない。

proguard.cfg に設定があるので編集する。

1. クラス名の難読化除外。

おすすめ
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService
-keep public class * extends android.view.View
-keep public class * extends android.support.v4.app.Fragment

この場合、クラス名は何でもよくてandroid.view.View、またはその子を継承しているもの
-keep public class * extends android.view.View

2. メソッド名の難読化除外

xml に android:onClick がある場合、xmlは難読化しないのでjavaのメソッド名も除外に指定する。

-keepclassmembers class * {
public void On*Click(android.view.View);
public void on*Click(android.view.View);
}

そのため、onClickメソッドはやっぱり on*Click という命名規則にした方が良い。

2011年11月4日金曜日

【Android】ProgressBarをコードで作成時にバー状態にする

ProgressBarをコードで作ると style が変更できないように見えます。
どうやら以下の方法で変えれるみたいです。
styleと名のつくものは全てそうかも。ていうかこれはテーマってことかな?

ProgressBar progress = new ProgressBar(this,null,android.R.attr.progressBarStyleHorizontal);

コンストラクタの第3引数で設定したらいいみたい。
android.R.attr.progressBar~ に他のスタイルもあります。

他に xml でProgressBarを定義して Inflate する方法でもいいですね。

2011年8月16日火曜日

【Chrome】Google Chrome拡張の保存先

Windows XPだと

C:\Documents and Settings\[ユーザー名]\Local Settings\Application Data\Google\Chrome\User Data\Default\Extensions

というところにある。

まあ、他のOSでも、 background.html とかで検索するときっとどっかに大量のファイルがヒットします。
そこに拡張のソースが見れる形であるので、参考になります。