2013-06-24 8 views
11

Próbuję użyć niestandardowej wersji do przepakowania mojej aplikacji na Androida. Chcę stworzyć wewnętrzną wersję beta, którą mogę zainstalować równolegle z moją aplikacją produkcyjną.Zmienianie nazwy pakietu aplikacji w niestandardowym kroku budowy Ant

This answer wygląda dokładnie tak, jak tego potrzebuję, ale nie działa.

Oto aktualizacja do mojego build.xml:

<target 
    name="-package-resources" 
    depends="-crunch" > 

    <echo>Repackaging AndroidManifest.xml to ${package.manifest.name} ${out.absolute.dir}/${resource.package.file.name}</echo> 

    <exec executable="${aapt}" failonerror="true"> 
     <arg value="package" /> 
     <arg value="-f" /> 
     <arg value="--auto-add-overlay" /> 
     <arg value="-M" /> 
     <arg path="AndroidManifest.xml" /> 
     <arg value="-S" /> 
     <arg path="${resource.absolute.dir}" /> 
     <arg value="-S" /> 
     <arg path="${android.library.reference.1}/res" /> 
     <arg value="-A" /> 
     <arg path="${asset.absolute.dir}" /> 
     <arg value="-I" /> 
     <arg path="${project.target.android.jar}" /> 
     <arg value="-F" /> 
     <arg path="${out.absolute.dir}/${resource.package.file.name}" /> 
     <arg value="--rename-manifest-package" /> 
     <arg value="${package.manifest.name}" /> 
    </exec> 
</target> 

bieganie wydaje się pomyślnie uruchomić mój nowy kod:

ant debug -Dpackage.manifest.name=com.example.test  
...  
-package-resources:  
     [echo] Repackaging AndroidManifest.xml to com.example.test /<mypath>/bin/<appname>.ap_ 
...  
BUILD SUCCESSFUL 

Jednak kiedy używam APKTool do kontroli APK, pakiet nazwa w moim AndroidManifest nie została zmieniona na nową wartość. Wydaje się, że wszystko, co się wydarzyło, to moje względne ścieżki aktywności ".MyActivity" zostały rozszerzone na moją oryginalną nazwę pakietu.

apktool d --force bin/<appname>-debug.apk 

Czy ktoś wie, co robię źle? Przyjrzałem się wszystkim innym odpowiedziom Stackoverflow i większość wydaje się trochę przestarzała. Buduję z Android SDK Tools Wersja 21.1.0 dla minSdkVersion 8.

Aktualizacji: Jak @athor komentarzach poniżej jego odpowiedź, moje założenie o inspekcji AndroidManifest.xml jest źle. Aby to przetestować, musisz spróbować zainstalować go zamiast oglądać dekompilowany XML!

Odpowiedz

16

ten sposób to zrobić (praca)

<target 
     name="-package-resources" 
     depends="-crunch" > 

     <!-- only package resources if *not* a library project --> 

     <echo message="Current Package name: ${app.custompackagename}" /> 

     <do-only-if-not-library elseText="Library project: do not package resources..." > 

      <aapt 
       androidjar="${project.target.android.jar}" 
       apkfolder="${out.absolute.dir}" 
       assets="${asset.absolute.dir}" 
       buildType="${build.target}" 
       command="package" 
       debug="${build.is.packaging.debug}" 
       executable="${aapt}" 
       ignoreAssets="${aapt.ignore.assets}" 
       libraryPackagesRefid="project.library.packages" 
       libraryRFileRefid="project.library.bin.r.file.path" 
       libraryResFolderPathRefid="project.library.res.folder.path" 
       manifest="${out.manifest.abs.file}" 
       manifestpackage="${app.custompackagename}" 
       nocrunch="${build.packaging.nocrunch}" 
       previousBuildType="${build.last.target}" 
       resourcefilename="${resource.package.file.name}" 
       resourcefilter="${aapt.resource.filter}" 
       versioncode="${version.code}" 
       versionname="${version.name}" > 

       <res path="${out.res.absolute.dir}" /> 

       <res path="${resource.absolute.dir}" /> 
       <!-- <nocompress /> forces no compression on any files in assets or res/raw --> 
       <!-- <nocompress extension="xml" /> forces no compression on specific file extensions in assets and res/raw --> 
      </aapt> 
     </do-only-if-not-library> 
    </target> 

Linia manifestpackage = "$ {app.custompackagename}" jest kluczem.

+0

Dziwne, to też nie działa dla mnie :-(Te same symptomy, APK zostaje zbudowany, ale rozpakowanie go pokazuje, że AndroidManifest.xml nie ma nowego pakietu.Próbowałem uruchomić "ant debug -Dapp .custompackagename = com.example.test "i próbowałem także wydania wersji, co doprowadza mnie do szału ... –

+1

Właśnie rozpakowałem moją aplikację. Nazwa pakietu w manifeście się nie zmienia. w sposób, który nie ma wpływu na wszystkie importowane pliki itd. Tak więc nazwa pakietu w manifeście pozostaje taka sama, ale faktyczna nazwa pakietu jest zmieniona. Czy próbowałeś zainstalować obie wersje aplikacji obok siebie? nie zmieniło się, nie będziesz w stanie. – athor

+0

Oh wow, masz rację - instaluje się dobrze obok innego APK! Jestem raczej zaskoczony, że zachowuje się w ten sposób ... Dzięki! –

1

Jeśli naprawdę chcesz, aby odzwierciedlać zmiany w AndroidManifest.xml, można stworzyć własny cel, który jest mniej więcej tak (ja używam podobny cel ten sam):

<target name="repackage"> 
    <!-- Replaces all of the references to the old package name in files in the "src" directory --> 
    <replace dir="src" value="${new.package}" token="${old.package}" summary="true"/> 

    <!-- renames the src folders --> 
    <move toDir="${new.package.dir}"> 
     <fileset dir="${old.package.dir}"/> 
    </move> 

    <!-- replaces the package name in the manifest --> 
    <replace file="AndroidManifest.xml" value="${new.package}" token="${old.package}" summary="true"/> 
</target> 

Można zrobić Kompilacja ant, która została przepakowana do pakietu debugowania, wdrożona, a następnie ponownie zapakowana z powrotem do pakietu produkcyjnego (lub odwrotnie).

+0

także rty dodać jeśli używasz coś jak niestandardowe widoki w układach lub niestandardowe attrs –

Powiązane problemy