2016-12-04 7 views
0

私のプロジェクトでは、2つの味(無料と有料)があります。有料パッケージには、メインパッケージからパッケージを拡張し、ライセンス実装を追加したアクティビティがいくつかあります。今、私のマニフェストをそのようにセットアップしようとしています。常に現在の味に関係する活動を開きます。どうやってするか?Androidフレーバー関連インテント

私は現時点でこのようにしています。

if(isFree) 
    startActivity(new Intent(this, ActivityA.class)); 
else 
    startActivity(new Intent(this, com.project.app.paid.ActivityA.class)) 

無料版では、パッケージ "com.project.app.paid。"がわからないという不満があります。プロガードがそれを取り除くので、良いことです。

+0

[こちらの質問](http://stackoverflow.com/questions/40858582/android-flavor-intent-activity)とどのように違うのですか? –

+0

1つの可能性は、両方のアクティビティにいくつかのプライベートアクションのために ''を追加し、 'android:exported =" false "'を使用して、サードパーティアプリケーションがこれらのアクティビティを開始しないようにすることです。そして、そのアクション文字列を使って 'Intent'を使います。 – CommonsWare

+0

@Mike M.活動が明示的に呼び出されることはないので、プログアードによって取り除かれ、質問を押し上げるための賞金を払うことはできません。 – XxGoliathusxX

答えて

0

私はこれが古い投稿であることを知っていますが、回答が得られていないので、他の誰かがこの投稿に出会った場合の遅れの方法を教えてください。

フレーバーでたくさんのことをすることができますが、あなたがしようとしていることは誰よりも簡単です。

まず、デバッグと実行のためのフレーバーを選択するビルドバリアントがあります。これを使うと、すべてのデバッグでデフォルトのメインリリースが使用されます。

第2に、パッケージ名を取得する必要はなく、ビルド設定フラグを使用するか、フレーバをチェックするだけです。 I.あなたがそれを必要な場所

BuildConfig.BUSINESS_ID 

android { 
    signingConfigs { 
     releaseA35Demo { 
      storeFile file("$projectDir/../yaskeystore.jks") 
      storePassword System.getenv('YOUR_APP_STUDIO_STORE_PASSWORD') 
      keyAlias System.getenv('YOUR_APP_STUDIO_KEY_ALIAS') 
      keyPassword System.getenv('YOUR_APP_STUDIO_KEY_PASSWORD') 
     } 
    } 

    flavorDimensions 'default' 

    productFlavors { 
     a35Demo { 
      dimension 'default' 
      applicationId "com.appstudio35.yourappstudio" 
      buildConfigField "String", "SERVER_URL", '"http://fakeNumbers.compute-1.amazonaws.com:3006"' 
      buildConfigField "int", "BUSINESS_ID", "1" 
      versionCode 1 
      versionName "0.01.01-b1" 
      minSdkVersion 21 
     } 
     a35DemoDev { 
      dimension 'default' 
      applicationId "com.appstudio35.yourappstudio.dev" 
      buildConfigField "String", "SERVER_URL", '"http://fakeNumbers2.compute-1.amazonaws.com:3006"' 
      buildConfigField "int", "BUSINESS_ID", "2" 
      versionCode 1 
      versionName "0.01.01-b1" 
      minSdkVersion 21 
     } 
    } 

    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 

      productFlavors.a35Demo.signingConfig signingConfigs.releaseA35Demo 
      productFlavors.a35DemoDev.signingConfig signingConfigs.releaseA35Demo 
     } 
    } 
} 

そして、単にのようなコードでそれを参照します。 BuildConfigを自動インポートするときに、誤ってライブラリプロジェクトのBuildConfigを使用していないことを確認してください。

次の方法は、おいしさを確認したい場合は、 BuildConfig.FLAVORを実行して、どちらが現在表示されているかを確認することです。しかし、あなたがフレーバーをチェックしているために、コンパイラの警告があることに注意してください。BuildConfigは、Build Variantのドロップダウンリストのために常に現在のものであると仮定していますが、これは常に無視できますまたは常に誤った警告、私はそれが動作することを保証します。

最後に、あなたのパッケージは、デバッグしているビルドバリアントによって駆動されます。イメージを追加して、どこを変更するかを確認できます。

enter image description here

お役に立てば幸いです。

私が言う最後のことは、MainActivityが自動的に処理され、MainActivityのパッケージを管理する必要がないということです。それは、あなたがいるフレーバーにそれぞれのフレーバーを使用します。通常、フレーバーにファイルを移動すると、リリース風味とバリエーションがそれぞれのMainActivityを使用するようになります。あなたがやっていることはちょっとハッキリですが、それはうまくいくと思います。しかし、フレーバーツールにはその仕事を任せて、あなたのためにそれを起動することをお勧めします。

MainActivityをメインから削除して、それがあなたの2つの味の中にあることを確認してください。例えば、私は私のメインのアプリケーションフォルダやファイルを持っていない注意:今、まだそれにマニフェストのポイントを参照してください

enter image description here

enter image description here

あなたは味がその仕事をやらせるのであれば、あなたは罰金になります。それをあなたのメインに残そうとするなら、紛争と警告に対処しなければなりません。

関連する問題