当我使用自定义build.gradle文件时,Android studio使用错误的文件路径到apk

时间:2014-09-23 06:42:39

标签: android gradle android-studio

因此,我尝试使用生成无符号apk的自定义生成文件,然后在其上运行任务,然后对其进行zipalign。我还没有完成这项工作。但是我确实有它创建和正确签署apk但当我尝试只是按下播放按钮在设备上调试运行它使用我的自定义调试设置工作室/ gradle生成我的apk并将其放在我想要的目录中但它无法将其推送到设备,因为它使用的文件路径不存在。 I / O错误:C:\ ProgramData \ Microsoft \ Windows \ Start Menu \ Programs \ Android Studio \ apk \ V2.5-10-debug-20140922-2335.apk(系统找不到指定的路径)。这是硬编码到工作室构建,因为我无法找到一个设置来改变它。它真的让整个过程成为一个真正的痛苦大声笑。事实上,我的机器上任何地方都不存在路径。

编辑继承我的build.gradle文件

import java.text.SimpleDateFormat
import java.util.regex.Pattern

apply plugin: 'com.android.application'


def buildTime() {
    def df = new SimpleDateFormat("yyyyMMdd'-'HHmm")
    df.setTimeZone(TimeZone.getDefault())
    return df.format(new Date())
}

def apkName = "MyApp"
def apkLocation

task (runApkSigTool , dependsOn: android, type: JavaExec) {

    classpath files('apksigtool.jar')
    main 'com.widevine.tools.android.apksigtool.ApkSigTool'
    args[0] = apkLocation
    args[1] = 'private_key.der'
    args[2] = 'my.crt'
    System.out.println(apkLocation);
}



android {
    compileSdkVersion 19
    buildToolsVersion "19.1.0"


signingConfigs{

    debug{
        storeFile file("debug.keystore")
        storePassword "android"
        keyAlias "androiddebugkey"
        keyPassword "android"

    }

    release{
        storeFile file("debug.keystore")
        storePassword "android"
        keyAlias "androiddebugkey"
        keyPassword "android"

    }

}


buildTypes {

    debug{

    }

    release {

    signingConfig signingConfigs.release
    runProguard false
    proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

    assembleDebug.doLast{
       runApkSigTool.execute()
    }

    zipAlign true

}

debug{

    signingConfig signingConfigs.debug
    runProguard false
    proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

    assembleDebug.doLast{
        runApkSigTool.execute()
    }

    zipAlign false

}


android.applicationVariants.all { variant ->

    def manifestFile = file("C:\\path\\app\\src\\main\\AndroidManifest.xml")
    def pattern = Pattern.compile("versionName=\"(.+)\"")
    def manifestText = manifestFile.getText()
    def matcher = pattern.matcher(manifestText)
    matcher.find()
    def versionName = matcher.group(1)
    pattern = Pattern.compile("versionCode=\"(.+)\"")
    matcher = pattern.matcher(manifestText)
    matcher.find()
    def versionCode = matcher.group(1)

    if (variant.zipAlign) {
        variant.outputFile = new File("apk/"+apkName+"-V"+versionName+"-"+versionCode+"-"+variant.name+"-"+buildTime()+"-unaligned.apk");
        variant.zipAlign.inputFile = variant.outputFile
        variant.zipAlign.outputFile = new File("apk/"+apkName+"-V"+versionName+"-"+versionCode+"-"+variant.name+"-"+buildTime()+".apk");
    } else {

        apkLocation = "apk/"+apkName+"-V"+versionName+"-"+versionCode+"-"+variant.name+"-"+buildTime()+".apk";
        variant.outputFile = new File("apk/"+apkName+"-V"+versionName+"-"+versionCode+"-"+variant.name+"-"+buildTime()+".apk");

        System.out.println("CREATED UNSIGNED APK---------------")

    }

}

}
lintOptions {
    abortOnError false
    ignoreWarnings true
    checkAllWarnings false
 }



}

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:20.0.0'
compile 'com.android.support:mediarouter-v7:20.0.0'
compile 'com.google.android.gms:play-services:5.0.89'
}

1 个答案:

答案 0 :(得分:0)

在准备adb push命令时,installDebug也会调用buildTime(),因此日期与每分钟都不匹配。