Cordova 3.4.0을 얻는 방법 Android 버전 이름 / 코드를 빌드로 설정하려면?

StackOverflow https://stackoverflow.com//questions/23001780

  •  20-12-2019
  •  | 
  •  

문제

현재 Cordova 3.4.0을 사용하고 있으며 CLI를 사용하여 명령을 사용하여 Android를 대상으로 프로젝트를 빌드합니다.

cordova build android
.

또는

cordova build android --release
.

MY CONFIG.XML은 다음과 같습니다.

<widget id="com.example.myapp" 
        version="0.0.3" 
        versionCode="2" 
        ...
        >
</widget>
.

myApp / Platforms / Android 의 결과 anroadmanifest.xml은 config.xml에 지정된 버전 및 버전 코드로 업데이트되지 않습니다. 기본값으로 유지됩니다.

<manifest 
        android:versionCode="1" 
        android:versionName="1.0"
        ...
</manifest>
.

이 버그입니까? 아니면 Config.xml에서 Android 용 VersionCode 및 VersionName을 지정 해야하는 다른 방법이 있습니까? 어쩌면 빌드 전에 올바른 버전으로 AndroidManifest.xml을 업데이트하는 데 사용할 수있는 훅이 있습니까?

나는 그런 식으로 바꿀 때마다 수동 으로이 작업을 업데이트하지 않아도됩니다.

  1. 오류가 발생하고 fiddly
  2. 익숙하지 않은 개발자
  3. 를 위해 변화하는 것은 분명한 일이 아닙니다.
  4. 플랫폼 폴더 중 누구도 소스 제어에 저장됩니다
  5. 이러한 이유로 버전 번호가 config.xml에 설정되도록합니다. 어떤 아이디어도 있습니까?

    감사합니다

도움이 되었습니까?

해결책

Cordova 3.5.0-0.2.4가있는 마지막 으로이 속성을 <widget> 노드 config.xml

에 추가했습니다.
 android-versionCode="10"
.

AndroidManifest.xml

로 올바르게 업데이트되었습니다.
 android:versionCode="10" 
.

다른 팁

michaeloryl 의 답변을 따르고 Cordova 3.4를 사용하여 구현 한 것이 있고 bash 도구 XMLStarlet

기본적으로 AndroidManifest.xml

에서 config.xml의 versioncode 속성 값을 복사합니다.

이를 실행하는 대신 :

cordova build android --release
.

실행 [스크립트가되어야합니다] :

cordova prepare android
# grab version code from config.xml
VERSION_CODE=$(xmlstarlet sel -t -v "//@versionCode" "config.xml")
# write correct version code in manifest
xmlstarlet ed -L -u "/manifest/@android:versionCode" -v "$VERSION_CODE" "platform/android/AndroidManifest.xml"
cordova compile android --release
.

Cordova 3.5로 업그레이드 할 때, 일반적인 'Cordova Build Android --Release'

을 재사용 할 수 있습니다.

버전명은 config.xml에서 플랫폼 / Android의 AndroidManifest.xml 파일 (적어도 Cordova 3.4.0)에서 복사되므로 여기에 문제가되지 않아야합니다. 그 부분이 문제가 없었습니다.

버전 코드를 얻는 것은 꽤 작업이었습니다. 실제로 일련의 작업을 실제로 그만한 gruntfile.js에 추가했습니다.

이것은 문자열 바꾸기 태스크입니다. ...에 " 그어 링 문자열 바꾸기 : VersionCode "은 package.json에 저장된 버전 코드를 증가시킵니다. " 그려진 문자열 바꾸기 : AndroadversionCode "은 해당 값을 가져 와서 플랫폼 / Android / AndroidManifest.xml 파일에 넣습니다.

    // STRING-REPLACE
    'string-replace': {
        versionCode: { // update the version code stored in package.json
            options: {
                replacements: [
                    {
                        pattern: /['"]androidVersionCode['"]:.*?['"](\d*)['"]/ig,
                        replacement: function (match, p1, offset, string) {
                            return '"androidVersionCode": "' + (parseInt(p1) + 1) + '"';
                        }
                    }
                ]
            },
            files: {
                'package.json': 'package.json'
            }
        },

        androidVersionCode: { // update the version code stored in AndroidManifest.xml
            options: {
                replacements: [
                    {
                        pattern: /android:versionCode=['"](\d*)['"]/ig,
                        replacement: function (match, p1, offset, string) {
                            var pkg = grunt.file.readJSON('package.json');
                            grunt.log.writeln("pkg.androidVersionCode: " + pkg.androidVersionCode);
                            grunt.log.writeln('Returning: ' + 'android:versionCode="' + pkg.androidVersionCode + '"');
                            return 'android:versionCode="' + pkg.androidVersionCode + '"';
                        }
                    }
                ]
            },
            files: {
                'platforms/android/AndroidManifest.xml': 'platforms/android/AndroidManifest.xml'
            }
        }
    }
.

사용하기 전에 gruntfile.js 파일 에서이 이 필요합니다. 물론 (NPM 설치뿐만 아니라 Grunt-String-Replace) :

grunt.loadNpmTasks('grunt-string-replace');
.

다음과 같이 다음과 같이 다음과 같은 선을 추가해야합니다.

"androidVersionCode": "13", // or whatever value is current for you
.

String-Replace : VersionCode 작업에 의해 증가합니다. Package.json에 라인을 넣어 "버전"으로 시작하는 행 뒤에 :

중요한 트릭 은 "Cordova 빌드 안드로이드"를 호출하는 대신 "Cordova 준비"Android "라고 부르는 대신에"unrunt replace-string : AndroidVersionCode "를 호출하는 것입니다. 그런 다음 "Cordova는 안드로이드를 컴파일합니다. 빌드는 "준비"및 "컴파일"을 호출하는 바로 가기 일뿐입니다.이 두 가지 작업 간에는 AndroidManifest.xml 파일을 수정하여 덮어 쓸 수 없도록하는 것입니다.

내 빌드 프로세스는 그어 v 범프 xmlpoke string-replace 을 사용하여 xmlpoke . 나는 j> jrunt-shell 를 실제로 호출합니다. 모든 것을 올바른 순서로 실행하고 실행하는 모든 것을 복사하는 단계를 수행하십시오.

이것이 도움이되는지 알려주십시오.

Cordova-custom-config plugin을 사용 하여이 문제를 해결 한 다음

안의 config.xml 에서이 문제를 해결했습니다.
<platform name="android">
.

put

<preference name="android-manifest/@android:versionCode" value="108" />
.

가치를 원하는 버전 코드로 변경 ...

그것은 나에게 완벽하게 일했습니다.

androidmanifest.xml (/platforms/android/androidmanifest.xml)에서 버전 코드 편집

<manifest android:hardwareAccelerated="true" android:versionCode="2"android:versionName="0.0.2" package="com.ionicframework.zinescreen841178"   xmlns:android="http://schemas.android.com/apk/res/android">
.

여기에서 버전 코드를 변경하지 마십시오. update.xml이 아닙니다. 릴리스 빌드를 수행 할 때 새 버전 코드를 생성합니다.

누군가가 아직도 이것에 걸쳐 무너지고있는 경우 : 현재 최신 Cordova 버전 (6.4.0) 에서는 여전히 사실입니다. 이 작업을 수행하기 위해 젠킨스 나 다른 프로세스가 없으면 버전 코드를 자체 줄에 넣을 수 있습니다.

<widget id="com.example.yourapp" 
    android-versionCode="1112" 
    version="1.1.3" 
    xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
.

을 클릭 한 다음이를 위로 실행하십시오 (예 : 릴리스 - 스크립트에서 사용) :

VersionCode=`cat config.xml | grep android-versionCode | sed -e 's/.*android-versionCode=\"\(.*\)\"/\1/'`
VersionCode=$((VersionCode+1))
sed -i "s/.*android-versionCode=\"\(.*\)\"/    android-versionCode=\"$VersionCode\"/" config.xml
.

yah, dirty하지만 작품 :)

Cordova 자체가 생성 한 것처럼 AndroidManifest.xml을 변경할 필요가 없습니다. 그래서 귀하의 변경 사항이 Cordova

에 의해 되돌아갑니다.

및 모든 것은 빌드됩니다. 빌드 폴더

에 위치해 있습니다

파일 -> platform / build.gradle

를 검색합니다

if (minsdkversion>= 20) {defaultconfig.versioncode += 9} else += 9} {defaultconfig.versioncode += 8}

버전 코드가 여기에서 업데이트되므로 변경하거나 하드 코드를 변경할 수 있습니다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top