ビルド時にその値の一部をプログラムで変更するために、Android プロジェクトから AndroidManifest.xml ファイルを解析しようとしています。(xml.dom.minidom を使用)
残念ながら、パーサーは不正な形式の XML を吐き出します (XML 入力から構築された DOM に変更を加えなくても)。
これは非常に単純な AndroidManifest.xml です。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="net.npike.android.sampleapp"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="17" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="net.npike.android.sampleapp.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
そして、これは私の非常に単純な python スクリプトで、ファイルをロードして解析し、書き戻すだけです。
#!/usr/bin/python
import os
from xml.dom.minidom import parse
dom1 = parse("AndroidManifest.xml")
f = os.open("AndroidManifest.xml", os.O_RDWR)
os.write( f, dom1.toxml() )
残念ながら、上記で共有されている AndroidManifest でスクリプトを実行すると、次の出力がディスクに書き込まれます。
<?xml version="1.0" ?><manifest android:versionCode="1" android:versionName="1.0" package="net.npike.android.sampleapp" xmlns:android="http://schemas.android.com/apk/res/android">
<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="17"/>
<application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme">
<activity android:label="@string/app_name" android:name="net.npike.android.sampleapp.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>tent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
何が起きてる?Python で AndroidManifest を解析するためのより良い方法はありますか?
編集:おそらく、不正な部分は最初のタグの後のすべてであることを追加する必要があります。