Androidこのパッケージは、同じ名前の既存のパッケージと競合しています.

2881 ワード

質問:
インストールアプリケーションでは、同じ名前の既存のファイルパッケージと競合することを示すメッセージが表示されます.インストールできません
可能な理由:新しいバージョンのソフトウェアのversionCodeは既存のバージョンのソフトウェアと同じです.
ソリューション:
新しいバージョンのソフトウェアのバージョンコードを変更します.パブリケーションのたびに手動で変更しないように、コードで自動的に+1を増やすように設定できます.
方法は次のとおりです.
 
ステップ1:versionという名前のファイルを作成します.properties(もちろん、これは必ずしもそう書く必要はありません)、位置とbuild.gradleファイルの同級、appこれは私の実行moduleです.
ファイルの内容は次のとおりです.
VERSION_CODE=10104
ステップ2:build.gradleファイルには以下のコードが含まれています(注意:コードの位置とandroid{...}増分後のバージョン番号を取得する方法
def getVersionCode(){//バージョン番号def versionFile=file('version.properties')//最初のステップで新規作成したファイルif(versionFile.canRead(){//ファイル読み出し異常を判断するProperties versionProps=new Properties()versionProps.load(new FileInputStream(versionFile))def versionCode=versionProps['VERSION_CODE'].toInteger()/ファイル内のバージョン番号を読み込む
    def runTasks = gradle.startParameter.taskNames
    String runTasksStr=""
    for(String s:runTasks){
      runTasksStr+=s+","
    }

   //runTasks=,\:app\:assembleRelease
   if (runTasksStr.indexOf("assembleRelease")>=0) {//  assembleRelease        ,           
    //             (     ,     +1)
    versionProps['VERSION_CODE'] = (++versionCode).toString()
    //versionProps['runTasks'] = strs
    versionProps.store(versionFile.newWriter(), null)
  }
  return versionCode.toInteger()//           

    } else {         throw new GradleException("Could not find version.properties!")     } }   android{     ... } 特に注意しなければならないのは、通常の状況では、パッケージ化時にのみバージョンコードを追加する必要があります.通常のデバッグではこの値を変更する必要はありません.そのため、次の判断を加える必要があります.
マルチチャネルパッケージがある場合は、task 1とtask 2は状況に応じて書くことができます.
if('assembleRelease'in runTasks|'task 1'in runTasks|'task 2'in runTasks){//assembleReleaseタスクのみバージョン番号を追加し、他のチャネルパッケージはここでそれぞれ//バージョン番号を追加してからファイルに書き込む(ここではキー、バージョン番号はプラス+1)versionProps['VERSION_CODE']=(++versionCode).toString()             versionProps.store(versionFile.newWriter()、null)}特筆すべきは、私がこのステップをしている間に穴にぶつかったことです.私はマルチチャネルパッケージを設定していません.taskの値はassembleReleaseです(一般的にはそうですが)、実際には私のところで使う必要があります.app:assembleRelease、何が原因なのかは、ここでは言いません.この値を決定する簡単な方法を教えます.
releaseのapkをパッケージ化し、パッケージ化の過程でこのコードを見ることができます.その中の2つの赤い枠の中の括弧の内容はあなたが必要とします.
ステップ3:build.gradleファイル、バージョン番号を設定するコードを追加してください
私はここで直接デフォルトの位置に设定するバージョン番号で、このコードの位置に注意しますよ!!!
versionNameはversionCodeと似ていますが、最後に簡単に説明します.
def currentVersionCode=getVersionCode()今、梱包してみると、version.propertiesの10104は10105になりましたが、変更がなければ2つの可能性があります.
1、ステップ2のassembleReleaseが間違っています.ステップ2の赤い文字でデバッグしてください
2、ステップ3でgetVersionCode()メソッドの位置が間違っていました(私はうっかりdefaultConfig{...}当たりました.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
最後に、getVersionName()という方法について簡単に説明します
def getVersionName() {     def date = new Date();     def versionName = date.format('yyyyMMddHHmmss');     return versionName }