2015-05-18 7 views
11

विफल रहता है मैं एक डॉकर छवि बनाने की कोशिश कर रहा हूं जिसे मैं शिप करने योग्य का उपयोग करके एंड्रॉइड प्रोजेक्ट बनाने के लिए उपयोग कर सकता हूं।डॉकर में स्थापित एंड्रॉइड एसडीके टूल्स

Installing Android SDK Tools, revision 24.2 
    Failed to rename directory /opt/android-sdk-linux/tools to /opt/android-sdk-linux/temp/ToolPackage.old01. 
    Failed to create directory /opt/android-sdk-linux/tools 

मैं एक समाधान यहाँ के कुछ पाया:

समस्या android update sdk आदेश है, जो निम्नलिखित त्रुटि देता है https://stackoverflow.com/a/8839359/867099 लेकिन यह विंडोज के लिए है, और लिनक्स पर इस समस्या को ठीक करने के लिए प्रतीत नहीं होता। ऐसा लगता है कि अद्यतन कमांड के दौरान, वर्तमान निर्देशिका उपयोग में है और इसलिए इसका नाम बदला नहीं जा सकता है। एंड्रॉयड आदेश को echo 'y'

RUN cp -r /opt/android-sdk-linux/tools /opt/android-sdk-linux/tools_copy 

RUN cd /opt/android-sdk-linux/tools && echo 'y' | /opt/android-sdk-linux/tools_copy/android update sdk --no-ui -a --filter tools,platform-tools,build-tools-22.0.1,android-21,extra-android-support,extra-google-google_play_services --force 

आदेश में स्वचालित रूप से लाइसेंस स्वीकार करने के लिए, मैं:

मेरे वैकल्पिक हल sofar, कि workaroundsuggestion का उपयोग कर, यह है।

लेकिन मुझे लगता है android आदेश भी सही निर्देशिका में चलाना चाहिए, जो पहले यही कारण है कि मैं इस पर cd

लेकिन, यह अभी भी विफल रहता है। मैं इस मुद्दे को ठीक करने के तरीके पर फंस गया हूं, इसलिए किसी भी मदद की सराहना की जाती है।

------ अद्यतन --------

मैं tools फिल्टर के बिना android sdk update आदेश चला, और अंत में, मेरे Gradle बनाता है सफल रहे हैं। इसलिए मुझे यह सुनिश्चित करने के लिए पता नहीं है कि उन्हें अपडेट करने में कोई समस्या नहीं है ...

+1

"ऐसा लगता है कि अद्यतन आदेश के दौरान, वर्तमान निर्देशिका उपयोग में है और इसलिए नाम नहीं बदला जा सकता है" - अपने 'एंड्रॉइड अपडेट sdk' कमांड को चलाने से पहले 'adb kill-server' आज़माएं। या देखें कि क्या कोई अन्य चल रही प्रक्रियाएं हैं जो इस निर्देशिका का संदर्भ दे सकती हैं। – CommonsWare

+0

मुझे लगता है कि यह वास्तव में '' '' adb''' है जो डीआईआर तक पहुंच रहा है, लेकिन जब मैं अद्यतन कमांड चलाता हूं तो यह शुरू होता है। तो समय पर इसे मारना संभव नहीं लगता है। – xorgate

+0

इस के अनुसार स्टोरेज ड्राइवर से संबंधित हो सकता है https://github.com/travis-ci/travis-ci/issues/2848 – shbi

उत्तर

0

यह वर्तमान में मेरे लिए काम कर रहा है, आप अपडेट कमांड को सफलतापूर्वक नीचे देख सकते हैं। मेरे पर्यावरण में ये FROM पदानुक्रम में 3 अलग-अलग डॉकर छवियां हैं, इसलिए यदि आप अपना केस नहीं हैं तो आप apt-get एस में से कई को गठबंधन कर सकते हैं।

FROM ubuntu:14.04 

# Set debconf to run non-interactively 
RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections 

# Install base dependencies 
RUN apt-get update && apt-get install -y -q --no-install-recommends \ 
     apt-transport-https \ 
     build-essential \ 
     ca-certificates \ 
     curl \ 
     git \ 
     libssl-dev \ 
     python \ 
     rsync \ 
     software-properties-common \ 
     wget \ 
    && rm -rf /var/lib/apt/lists/* 

# Install the JDK 
RUN echo debconf shared/accepted-oracle-license-v1-1 select true | debconf-set-selections && \ 
    echo debconf shared/accepted-oracle-license-v1-1 seen true | debconf-set-selections && \ 
    add-apt-repository -y ppa:webupd8team/java && \ 
    apt-get update -qq && \ 
    DEBIAN_FRONTEND=noninteractive apt-get install -qqy --force-yes oracle-java7-installer && \ 
    rm -rf /var/lib/apt/lists/* /var/cache/oracle-jdk7-installer 

# Install Android Dev Tools 
RUN apt-get update && apt-get install -y -q --no-install-recommends \ 
     lib32ncurses5 \ 
     lib32stdc++6 \ 
     lib32z1 \ 
     libswt-gtk-3-java \ 
     unzip \ 
    && rm -rf /var/lib/apt/lists/* 

RUN wget -qO- "http://dl.google.com/android/android-sdk_r23.0.2-linux.tgz" | tar -zxv -C /opt/ 

RUN cd /opt/android-sdk-linux/tools/ && \ 
    echo y | ./android update sdk --all --filter platform-tools,build-tools-20.0.0,android-17,sysimg-17,system-image,extra-android-support --no-ui --force 

ENV PATH /opt/android-sdk-linux/build-tools/20.0.0:$PATH 
+3

में 'एंड्रॉइड अपडेट एसडीके' कमांड ''एंड्रॉइड अपडेट एसडीके' कमांड वास्तव में" एंड्रॉइड एसडीके टूल्स "पैकेज अपडेट नहीं कर रहा है (' टूफिल्टर' के लिए 'टूल्स' विकल्प) ओपी स्थापित करने में परेशानी हो रही है। –

+0

आप '--force' ध्वज का उपयोग क्यों कर रहे हैं? –

9

यह एक एकल Dockerfile के RUN आदेश में सभी एंड्रॉयड एसडीके आदेशों के संयोजन के द्वारा हल किया जा सकता। डॉकर की फाइल सिस्टम के साथ इसका कुछ संबंध है।

एक विस्तृत एंड्रॉयड ओपन सोर्स प्रोजेक्ट के लिए समस्या ट्रैकर पर a post से स्पष्टीकरण के लिए:

The problem is caused when you run the SDK update in a Docker container. Docker uses a special filesystem which works like a version control system (e.g. git) and records all changes made to the filesystem. The problem is that the SDK update uses a hardlink move operation to move the 'tools' directory, which is not supported by the underlying Docker filesystem.

The solution for this is to simply run all Android SDK commands in a single 'RUN' command in Docker. That way, the hardlink move works as normal, as long as you don't use the 'hardlink move' operation between multiple RUN command (snapshots). The advantage of this is also that your Docker layers will be smaller (compared to running multiple seperate RUN commands).

Here is the line from the Dockerfile:

RUN wget https://dl.google.com/android/android-sdk_r24.4.1-linux.tgz && \ 
    tar xzf android-sdk_r24.4.1-linux.tgz && \ 
    rm android-sdk_r24.4.1-linux.tgz && \ 
    (echo y | android-sdk-linux/tools/android -s update sdk --no-ui --filter platform-tools,tools -a) && \ 
    (echo y | android-sdk-linux/tools/android -s update sdk --no-ui --filter extra-android-m2repository,extra-android-support,extra-google-google_play_services,extra-google-m2repository -a) && \ 
    (echo y | android-sdk-linux/tools/android -s update sdk --no-ui --filter build-tools-23.0.2,android-24 -a) 
+0

क्यों ** बिल्ड-टूल्स -23.0.2 **, और नहीं ** 25.0.0 **? –

+1

@IgorGanapolsky 25.0.0 उस समय उपलब्ध नहीं था। https://developer.android.com/studio/releases/build-tools।एचटीएमएल –

+0

खैर, मैं यह नहीं कहूंगा कि डॉकर के साथ इसका कोई लेना-देना नहीं है, "एसडीके अपडेट 'टूल्स' निर्देशिका को स्थानांतरित करने के लिए हार्डलिंक मूव ऑपरेशन का उपयोग करता है, जो अंतर्निहित डॉकर फाइल सिस्टम द्वारा समर्थित नहीं है।" –

संबंधित मुद्दे