Azure DevOps (이전 VSTS)의 Android Signing에서 Zipalign을 켜십시오.

【문제】 Azure DevOps로 빌드 한 .apk가 작동하지 않습니다?



Xamarin 프로젝트의 빌드를 Azure DevOps (당시 VSTS)에 올리고 싶었지만 생성 된 .apk가 작동하지 않아 고민했습니다..
  • .ipa는 움직인다
  • 로컬 PC에서 빌드하면 움직인다
  • 설치 가능
  • 시작 직후 스플래시 화면 앞으로 떨어짐
  • AppCenter에 Crash를 기록하기 전에 떨어집니다

  • 상당히 오랫동안 네그 있었습니다만, 겨우 해결했으므로 보고합니다.

    【해결】 원인은 zipalign



    Android Device Monitor에서 앱이 실행될 때의 모습을 관찰했는데 다음과 같은 오류 메시지가 나타났습니다. 태그는 monodroid-assembly입니다.

    Assembly 'assemblies/hoge.dll' is located at a bad address 0x9e3eb44e
    You MUST run 'zipalign' on base.apk

    과연, 왜 더 빨리 Android Device Monitor를 보지 않았다. Android Signing/Zipalign Options/Zipalign을 ON으로 변경하면 해결되었습니다

    어리석은



    태스크 Android Signing의 초기 상태에서 Zipalign은 OFF로 되어 있고(Sign the APK도 OFF입니다만), 설명도 다음과 같은 느낌으로,

    Select if you want to zipalign your package. This reduces the amount of RAM consumed by an app.

    따로 OFF 그대로도 좋을 것 같지 않습니까

    【하즐레】 서명을 의심



    처음에는 서명을 의심했습니다. Android Signing/Signing Options/Jarsigner arguments 는 정말로 초기치 -verbose -sigalg MD5withRSA -digestalg SHA1 그대로 있을 수 있을까 하는 의심입니다.

    서명에 이상이 없는지 확인합니다.
    jarsigner -verify -verbose -certs hoge.apk
    

    실제 기기에 설치하여 동작을 확인합니다.
    adb install hoge.apk
    

    비교를 위해 로컬 PC에서도 Azure DevOps와 동일한 명령으로 서명해 보겠습니다.
    jarsigner -keystore Hoge.keystore -storepass xxx -keypass xxx -verbose -sigalg MD5withRSA -digestalg SHA1 -signedjar hoge.apk hoge-unsigned.apk Hoge
    

    다음과 같은 상황이었습니다.


    .apk
    서명 verify
    앱 동작


    Azure DevOps로 서명한 .apk
    OK
    시작 직후 종료됩니다.

    로컬에서 jarsigner로 서명한 .apk
    OK
    시작 직후 종료됩니다.

    로컬에서 Visual Studio GUI로 서명한 .apk
    OK
    정상적으로 작동


    Visual Studio에서 실행중인 명령을 살펴보십시오.-digestalg SHA1-sigalg md5withRSA 를 디폴트로 지정하고 있는 것 같습니다.

    결국, 서명의 부분은 신용해 좋을 것 같다, 라고 하게 되었습니다. 라고 할까, 도중에 깨달았습니다만, 만약 서명에 문제가 있으면, 기동전에 인스톨의 시점에서 실패할 것입니다. .keystore 파일을 여러 번 다시 업로드했지만

    참조



  • Android signing build and release task - Azure DevOps & TFS | Microsoft Docs

  • Android 애플리케이션 패키지에 서명 - Xamarin | Microsoft Docs
  • 좋은 웹페이지 즐겨찾기