awacleberryの備忘録

アナログ人間のデジタル日記。

【Android】アンインストールしたアプリのPreferenceが復元される場合

アプリをアンインストールして再度インストールした際に、以前のアプリの設定値(Preference などの値)が復元される場合がある。

普段使いしているアプリなら助かるけど、デバッグ中に復元されると困るので、[設定]>[詳細設定]>[バックアップとリセット]>[自動復元]をオフにする。

スクリーンショット 2018-05-26 8.42.30.png

【Android】HUAWEIのAndroid端末でLogが表示されない場合

HUAWEI の P10Lite を開発用端末として買った時に、Verbose と Debug のログが出力されなかったので、その設定方法をメモ。

1. 通話アプリに指定番号をダイヤル

まずは端末の通話アプリで以下の番号をダイヤルする。

*#*#2846579#*#*

次のような ProjectMenu が表示される。

screen1.png

2.LOG Setting の項目にチェック

ProjectMenu > Background Settings を選択する。

screen2.png

Background Settings > LOG Setting を選択し、AP Log、Charge Log、Sleep Log の全てのチェックボックスにチェックを付ける。

screen3.png

以上の設定で Log がちゃんと表示されるはず。なぜデフォルトでオフにしているのだろう。

同じところではまった方もいるみたいです。

Android HUAWEI端末P8Liteで Logcatを動かす方法 【AndroidStudio】Log.dとLog.vが出力されない

【Android Studio】プロローグにはコンテンツを指定できません

たまに新しいプロジェクト作ってる時に出て戸惑う次のエラー。

プロローグにはコンテンツを指定できません

大体は、新規プロジェクト作成時に自動生成されない assets ディレクトリを手動で作ろうとした際に、ディレクトリの場所を間違えているというクソしょうもないミス。

本来は、以下のように/assets は /java とか /res と同じ階層。

.
├── assets
├── java
│   └── com
│       └── hoge
│           └── hogeapp
└── res
    ├── drawable
    ├── layout
    ├── mipmap-hdpi
    ├── mipmap-mdpi
    ├── mipmap-xhdpi
    ├── mipmap-xxhdpi
    ├── mipmap-xxxhdpi
    ├── values
    └── values-w820dp

このエラーに悩まされている場合は、なぜか /res の下に作ってしまっている。2度もこれをやってしまったので、アホな自分への戒め備忘録。

【Android】ProductFlaver で起動アクティビティーを代えるに際しやったこと

やりたいこと

2つの productFlavor で起動アクティビティーを代える。

  • first -> FirstMainActivity
  • second -> SecondMainActivity

なお、first のマニュフェストにおいて LAUNCHER は指定済みの状況下で、second で別のアクティビティーを起動させたい。そのまま second のマニュフェストに SecondMainActivity を LAUNCHER 指定しても、2つ起動してしまう(アイコンが2つできる等)。

失敗した方法

オーバーライドさせたい方のマニュフェストに、

<category android:name="android.intent.category.DEFAULT" />

を入れれば良いみたいな話が stackoverflow にあったけど、うまくいかなかった(以下のリンク)。

https://stackoverflow.com/questions/32320585/how-to-use-a-different-launcher-activity-in-a-product-flavor

エイリアスを作って対応する方法もあるみたいだけど、あんまりシンプルじゃない気がする。

成功した対応

要は、LAUNCHER の指定をしているアクティビティーは1つにしたいので、オーバーライドさせたいマニュフェストでメインの LAUNCHER の指定を削除すればよい。

 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools"
     package="com.yourpackage">
         <activity
              android:name=".FirstMainActivity"
              android:label="@string/app_name">
                  <intent-filter tools:node="remove">
                        <action android:name="android.intent.action.MAIN" />
                        <category android:name="android.intent.category.LAUNCHER"/>
                  </intent-filter>
         </activity>
         <activity
              android:name=".SecondMainActivity"
              android:label="@string/app_name">
                  <intent-filter>
                      <action android:name="android.intent.action.MAIN" />
                      <category android:name="android.intent.category.LAUNCHER" />
                  </intent-filter>
        </activity>

</manifest>

インテントフィルターで tools:node="remove" をしている。ベストプラクティスかは不明。以下の stackoverflow を参考にした。

https://stackoverflow.com/questions/32324213/android-gradle-two-different-launcher-activities-for-two-different-product-flavo

【iOS-Swift】UIActivity で共有モーダルを表示する

スクリーンショット 2017-11-13 17.11.52.png

ざっと次のような感じ。

let text:String = "この内容をシェア!"
let items = [text]
            
// 初期化
let activityVC = UIActivityViewController(activityItems: activityItems, applicationActivities: nil)
            
// UIViewを出すViewを指定:iPadでは以下を入れないと落ちる
activityVC.popoverPresentationController?.sourceView = self.view
            
// 共有で使用しないタイプを指定
let excludedActivityTypes = [
  UIActivityTypePostToWeibo,
  UIActivityTypeSaveToCameraRoll,
  UIActivityTypePrint
]

// タイプを登録
activityVC.excludedActivityTypes = excludedActivityTypes
            
// UIActivityViewControllerを表示
self.presentViewController(activityVC, animated: true, completion: nil)

以下の部分がないと iPadで落ちるので注意が必要。

activityVC.popoverPresentationController?.sourceView = self.view

参考
[Swift]UIActivityの使い方まとめ

【PHP】laravel の導入

laravelのインストール

composerを使って、laravelをインストールしてプロジェクトを作る。ちょい時間が掛かる。

composer create-project laravel/laravel ${プロジェクト名} --prefer-dist

laravelのバージョンは、以下で確認できる。

php artisan --version

サーバーを立てる

laravelの簡易サーバーを立てるなら、作成したプロジェクトディレクトリへ移動し、

php artisan serve

なお、artisan は「職工」という意味で、ipa表記を見る限り、アメリカ発音だと「アーティズン」って感じ。localhost:8000でデモページが開く。

MacApacheでサーバーを立てるなら、次のようにlaravelプロジェクトのpublic以下をドキュメントルートにして、サブドメインとかを用意。

127.0.0.1 laravel-test.localhost
<VirtualHost *:80>
    DocumentRoot "/Library/WebServer/Documents/${プロジェクト名}/public"
    ServerName laravel-test.localhost
    <Directory "/Library/WebServer/Documents/${プロジェクト名}/public">
        AllowOverride All
    </Directory>
</VirtualHost>

laravel-test.localhostでデモページが開く。デプロイする本番のサーバーでも、ドキュメントルートをpublic/以下に設定する必要がある。

MacのlocalhostをiPhoneで確認する方法

バーチャルホストなしの場合

システム環境設定 > 共有で、インターネット共有を有効にする。「ローカルネットワーク上のコンピュータから、次のアドレスでこのコンピュータにアクセスできます:xxx.xxx」などと書かれた箇所のxxx.xxxに他の端末からアクセスすれば、localhostが表示できる。

バーチャルホストありの場合

バーチャルホストを設定していると、他の端末でサブドメインなどの名前解決ができないので、ApacheのProxyを使って共有する。

proxyを有効にする

/etc/apache2/httpd.conf の以下の項目を有効にする。コメントアウトされていたら、#を取り除く。

LoadModule proxy_html_module libexec/apache2/mod_proxy_html.so
LoadModule proxy_module libexec/apache2/mod_proxy.so
<IfModule proxy_html_module>
  Include /private/etc/apache2/extra/proxy-html.conf
</IfModule>

/etc/apache2/extra/proxy-html.conf の末尾に以下を追加する。

<IfModule mod_proxy.c>
    ProxyRequests On
    ProxyVia On
    Listen 8080
    <Proxy *>
        Order deny,allow
        Deny from all
        Allow from all
    </Proxy>
</IfModule>

Apacheを再起動すれば、pc側の設定は終了。

iPhoneのHTTPプロキシを設定

設定 > Wi-Fi で使用しているネットワークを選択し、HTTPプロキシの項目を「手動」に選択する。「サーバー」にpcのローカルip、「ポート」に8080を指定する。これで、iPhoneからも、バーチャルホストを使用したlocalhostを確認できる。

参考
MacとiPhoneにHosts設定をする