Activity Alias のdebug時差し替え利用を考えてみた

はじめに

Activity Alias の説明を読んでて、イマイチ利用利点がわからなかったんだけど

の時、debug時にActivity差し替えられると便利かなーと思って調べたのでメモ

動作環境

  • macOS Sierra
  • 16G
  • HDDタイプのiMac
  • AS 3.0-Canary7
  • gradle plugin 2.3.3
  • gradle runtime-4.1-m1-bin.zip

宣言記述側

  • app/src/main/AndroidManifest.xml
<activity
        android:name="hoge.fuga.maiu.MainRealActivity">
</activity>

<activity-alias 
        android:name="hoge.fuga.maiu.MainActivity"
        android:targetActivity="hoge.fuga.maiu.MainRealActivity"/>
  • app/src/debug/AndroidManifest.xml
<activity
        android:name="hoge.fuga.maiu.MainDebugActivity">
</activity>

<activity-alias 
        tools:replace="android:targetActivity" //★
        android:name="hoge.fuga.maiu.MainActivity"
        android:targetActivity="hoge.fuga.maiu.MainDebugActivity"/>
  • app/src/debug/MainDebugActivity.java
public class MainDebugActivity extends MainRealActivity{

}

な感じを想定。ようはよくある

  • Application => DebugApplication

のActivity版をしたかったイメージ

呼び出し側の書き方

これ結構悩んだ・・・・

Intent intent = new Intent(this,MainActivity.class);
startActivity(intent);

で呼ぼうとするとエラーに・・・

まあ MainActivity.class自体の実体がないから当たり前だが。。。

で色々と調べたら、下記ならOK。

build.gradleの設定でパッケージ名のみ違うdebug.apkを作る上での注意点メモ - exception think

Intent intent = new Intent();
intent.setClassName(getPackageName(), "hoge.fuga.maiu.MainActivity"); //★
startActivity(intent);

又は

Intent intent = new Intent(); 
ComponentName componentName = new ComponentName(getPackageName(),"hoge.fuga.maiu.MainActivity"); 
intent.setComponent(componentName); 
startActivity(intent);

参考サイト