2016-12-21 2 views
0

私はAndroidスタジオで、バーコードスキャナを備えた産業用デバイスを使用するAndroidアプリケーションを開発しています。 いくつかのモデル(異なる企業の異なるモデル)は特別なSDKを使用しています(API 23だけでなく、特別なSDKでコンパイルする必要があります)。SDKに依存するAndroidスタジオコード

私の問題は、他のデバイスに切り替えて他のSDK(たとえばAPI 23など)でコンパイルする必要があるということです。私はもはや動作しないコードをいくつか持っています。インポートは存在しません特定のデバイス用に使用するオブジェクトやメソッドもありません。

私のコードは次のようになります。

if(Build.MANUFACTURER.equals(COMPANY_NAME)){ 
    // do some stuff that won't compile with an other sdk 
}else if (Build.MANUFACTURER.equals(COMPANY_NAME)){ 
    // do some other stuff that compile with a specific sdk too... 
}else if (...){ 
    ... 
} 

それだけで特定のデバイス上で実行されますので、私は、コードを削除したり、論評に入れたくない(と私は戻ってくるしたくありません特定のSDK用にコンパイルするたびにコードのコメントを外してください)。

他のSDKのエラーを表示することなく、コードを保持しておく必要があります(また、必ずしもコメントに入れないでください)。

  • compileSdkVersionは、私たちがこのような状況に応じてcompileSdkVersionを置くことができるproduct flavors
  • に設定することができないようです:

    場合(私がこれまでに発見した何

    条件){

    compileSdkVersion 23 
    

    } else {

    compileSdkVersion 'Datalogic:Datalogic SDK v1:23' 
    

    }

しかし、それはそれの後に実行されますので、条件は、製品の味からすることはできません。 "解決策"は、gradle.propertiesに条件を入れてhereと書かれていますが、手動でコンパイルするたびに変更する必要があり、特定のSDKバージョンでコンパイルされないコードを扱うことはできません。

答えて

0

特殊なデバイスに依存するコードがある場合は、別のフレーバーを使用する必要があります。

productFlavors { 
    normal { 
     resValue "string", "someApiKey", "1111" 
    } 

    samsung { 
     applicationId 'com.example.special' // change the package name 

     resValue "string", "someApiKey", "2222" 
    } 
    instantTest { 
     minSdkVersion 21 
    } 
} 

次に、あなたはsrc/samsung/javaの代わりsrc/main/javaにあなたの特別なコードを保存することができます。上記のsomeApiKeyには、BuildConfig.someApiKeyを使用してアクセスできます。

あなたの依存関係は、ターゲットとして、常に最新バージョンを使用している場合、実行時にチェックして確認する必要がありますAPI-レベルに関してはそれほど代わり

compile 'something:general:0.0' 

使用

samsungCompile 'something:forSamsung:0.0' 

の特別な接頭辞を取得しますメソッドが利用可能であり、その場合にいくつかのフォールバックを追加してください:

Regardinあなたはこれを試みることができるビルドの依存関係の異なるセットを持つグラム問題:

buildscript { 
    dependencies { 
    if(!this.properties['target'].equals('datalogic')) { 
     compile '...' 
    } else { 
     // ... 
    } 
    } 
} 

あなたは、例えば、-Ptarget=datalogicを経由してその「ターゲット」を指定することができます次のコマンドを試してください:./gradlew -Ptarget=datalogic assambleRelease

+0

私の質問 –

+0

を編集するのは擬似コードだったのですが、面白そうですが、私が欲しいものではないか、あるいは誤解されているかもしれません。これでcompileSdkVersionを指定できますか? –

+0

理論的には可能ですが、そうしてはいけません。従来のSDKでコンパイルするのは意味がありません。推奨されていないコードを使用しないようにコード内で確認することができます。 – rekire

関連する問題