Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
マ テ リ ア ル デ ザ イ ン と
A W S P i n p o i n t
と 戦 っ た お 話
teradonburi
• 元ソフトバンクでかざして募金アプリ(iOS、Android)とか作りました
• dely株式会社でKURASHIRUという料理動画アプリのAndroid担当してます
• Qiitaやってます
• 猫と料理好きです
• LT初めてなので優しく...
マテリアルデザインの苦悩
• マテリアルデザインではまったところ
– rippleアニメーション
android:background="?attr/selectableItemBackground"
– Elevation属性
そもそもAnd...
対策:ライブラリ内privateメンバーの上書き
BottomNavigationの
TextViewがライブラリ内privateメンバで
publicメソッドが提供されてないため
フォントサイズが変えられない(^p^)
(項目和名だとガイドラ...
AWS Pinpointではまる
• プッシュ通知用にAWS Pinpointを導入(2016年12月サポート開始)
– Android4でのフォアグラウンドの挙動おかしくね?
– AWS SDK内で割と落ちる
– FCMサポートしてるって書い...
private boolean isForeground() {
// Gets a list of running processes.
ActivityManager am = (ActivityManager)
pinpointConte...
対策:ライブラリ内メソッドの踏襲
if (NotificationClient.CampaignPushResult.APP_IN_FOREGROUND.equals(pushResult)) {
// If the app was in th...
対策:Try Catch NullException
Crashlyticsでクラッシュログ見ると
AWS SDK内で
ぬるぽで結構落ちてた \(^o^)/
@Override
public AWSCredentials getCredenti...
まとめ
• マテリアルデザイン
– そもそも公式サポートがAndroid5以上なのでAndroid4対応しんどい
– 公式サポートライブラリがガイドラインをカバーしきれてない(怒
– サードパーティライブラリでもカバーできないところは実力行使で...
から金のドロイド君が届きました
Google Play 2016 ベスト自己改善アプリ(KURASHIRU)
弊社では絶賛Androidエンジニア募集中です!
オフィス訪問からでも歓迎です。
Wantedlyより募集中です。
個人的にでも声かけてください。
Upcoming SlideShare
Loading in …5
×

Shibuya.apk

311 views

Published on

Shibuya.apk
https://shibuya-apk.connpass.com/event/48631/

Published in: Technology
  • Be the first to comment

Shibuya.apk

  1. 1. マ テ リ ア ル デ ザ イ ン と A W S P i n p o i n t と 戦 っ た お 話 teradonburi
  2. 2. • 元ソフトバンクでかざして募金アプリ(iOS、Android)とか作りました • dely株式会社でKURASHIRUという料理動画アプリのAndroid担当してます • Qiitaやってます • 猫と料理好きです • LT初めてなので優しくしてね(はぁと
  3. 3. マテリアルデザインの苦悩 • マテリアルデザインではまったところ – rippleアニメーション android:background="?attr/selectableItemBackground" – Elevation属性 そもそもAndroid4以下で属性がないので擬似drawable作成で代 用 – FloatingActionButton 公式サポートライブラリで Android4で背景色の動的変更できない サードパーティライブラリで代用 – BottomNavigation 公式サポートライブラリでガイドラインのスクロールで隠れる が未対応(^ω^#)ビキビキ サードパーティライブラリで代用 (ライブラリでも文字サイズが変更できない!) 実力行使
  4. 4. 対策:ライブラリ内privateメンバーの上書き BottomNavigationの TextViewがライブラリ内privateメンバで publicメソッドが提供されてないため フォントサイズが変えられない(^p^) (項目和名だとガイドライン無視してサイズ変えたい) @SuppressWarnings("unchecked") void setBottomBarTabItem(BottomNavigationBar bottombar){ // ボトムバータブのprivateメンバをハックする try { Field tabs = bottombar.getClass().getDeclaredField("mBottomNavigationTabs"); tabs.setAccessible(true); List<Object> navigationTabs = (List<Object>)tabs.get(bottombar); for(int i = 0;i < navigationTabs.size();++i){ Field label = navigationTabs.get(i).getClass().getSuperclass().getDeclaredField("labelView"); label.setAccessible(true); TextView labelText = (TextView)label.get(navigationTabs.get(i)); labelText.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimension(R.dimen.bottombar_textsize)); } } catch (Exception e){ e.printStackTrace(); } } # BottomBar -keepnames class com.ashokvarma.bottomnavigation.** { *; } Proguardで名前変えられたら リリースビルドapkで落ちるので注意
  5. 5. AWS Pinpointではまる • プッシュ通知用にAWS Pinpointを導入(2016年12月サポート開始) – Android4でのフォアグラウンドの挙動おかしくね? – AWS SDK内で割と落ちる – FCMサポートしてるって書いてるけど使い物にならなかったよ・・・ 実力行使
  6. 6. private boolean isForeground() { // Gets a list of running processes. ActivityManager am = (ActivityManager) pinpointContext.getApplicationContext().getSystemService(Context.ACTIVITY_SERVICE); List<ActivityManager.RunningAppProcessInfo> tasks = am.getRunningAppProcesses(); // On some versions of android the first item in the list is what runs in the foreground, // but this is not true on all versions. Check the process importance to see if the app // is in the foreground. final String packageName = pinpointContext.getApplicationContext().getPackageName(); for (ActivityManager.RunningAppProcessInfo appProcess : tasks) { final String processName = appProcess.processName; if (ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND == appProcess.importance && packageName.equals(processName)) { return true; } } return false; } 対策:ライブラリ内メソッドの踏襲 AWS SDK内でAndroid4以下のフォアグラウンドの判定が間違ってる (・∀・)カエレ!!
  7. 7. 対策:ライブラリ内メソッドの踏襲 if (NotificationClient.CampaignPushResult.APP_IN_FOREGROUND.equals(pushResult)) { // If the app was in the foreground, you may want to add logic here to send // a broadcast back to your main activity to show something to the user. appContext = getApplicationContext(); // AWS SDKの処理ではAndroid Forgroundの判定が足りないので正しく判定(Android 4) if(android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.LOLLIPOP){ ActivityManager am = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE); if (am.getRunningTasks(1).get(0).topActivity.getPackageName().equals(getApplicationContext().getPackageName())) { // ここにフォアグラウンドの場合の処理を実装 showPopup(data); } else{ // バックグラウンドの処理はAWS SDK内部処理を踏襲したメソッドを実装・・・(通知バナー表示) handleCampaignPush(data,this.getClass()); } } else{ // Android 5以上のフォアグラウンド処理 showPopup(data); } } // AWS SDKライブラリ内部のメソッドをアレンジ/(^o^)\ private void handleCampaignPush(final Bundle data, final Class<?> targetClass) { ・・・ }
  8. 8. 対策:Try Catch NullException Crashlyticsでクラッシュログ見ると AWS SDK内で ぬるぽで結構落ちてた \(^o^)/ @Override public AWSCredentials getCredentials() { // Pinpoint SDK v2.3.8にはバグがある // https://github.com/aws/aws-sdk-android/issues/233 (Issues投げました) try{ return underlyingProvider.getCredentials(); }catch (NullPointerException e){ throw new AmazonServiceException("credentials null error"); } }
  9. 9. まとめ • マテリアルデザイン – そもそも公式サポートがAndroid5以上なのでAndroid4対応しんどい – 公式サポートライブラリがガイドラインをカバーしきれてない(怒 – サードパーティライブラリでもカバーできないところは実力行使で (レイアウトの組み合わせでできなかったりもするので注意) • AWS SDK for Android – 公式ライブラリにバグがないとは限らない(特に出たてのサービスは・・・) – バグ報告は公式GitHubにIssuesやpull request投げましょう – 出たてのサービスをどうしても使う場合は実力行使で privateやめてくださいしんでしまいます (^p^)
  10. 10. から金のドロイド君が届きました Google Play 2016 ベスト自己改善アプリ(KURASHIRU)
  11. 11. 弊社では絶賛Androidエンジニア募集中です! オフィス訪問からでも歓迎です。 Wantedlyより募集中です。 個人的にでも声かけてください。

×