2

PhoneGap Buildは、ビルド オプション (config.xml) を構成するための XML ファイルと共に HTML+JS+CSS ソースを取得し、サポートされているすべてのプラットフォーム (iOS、 Android、Blackberry、Symbian、WebOS) を使用することで、時間を大幅に節約でき、頭痛薬の費用を大幅に節約できます。

残念ながら、外部 Web サイトへのリンクの動作には一貫性のない動作があります

現在、リンクを外部ブラウザで開くには、別のコードを PhoneGap Build にアップロードする必要があります。iOS の場合はドメインをホワイトリストに登録する必要があり、Android の場合はドメインを非公開にする必要があります。

includeForAndroid="false" のような属性をアクセス タグに追加することで一貫性を持たせることができます。これにより、Android ではアクセス タグのコンテンツが含まれず、リンクは iOS と同様に外部ブラウザーで開かれます。

Config.xml ドキュメント; ここに関連するブログ投稿があります。

従業員による修正案はありますが、製品ではまだ作成およびリリースされていません。

Cordova オープン ソース プロジェクトでこれを解決したいと考えています。それまでの間、PhoneGap Build については、次のように考えています。

<access origin="*" onlyInBrowser="true" />

Android ではタグは含まれませんが、iOS では含まれます。

この変更が行われ、製品で利用可能になるまで、回避策は、アップロードする 2 つの zip ファイルを作成することです。1 つは Android 用 (アクセス タグなし) で、もう 1 つは iOS 用 (アクセス タグあり) です。理想的ではありませんが、アプリの一貫した動作のために必要なことです。

私は既に ANT を使用してこのプロジェクト内の多くのタスクを自動化しているので、ANT が config.xml の更新も実行してくれると理想的です。

参考までに、2 つの zip をビルドする ANT コードを次に示します。

<target name="BUILD-ZIP" depends="verify-using-minified-js,prepare-for-build">

    <tstamp>
        <format property="build.tstamp" pattern="yyyy-MM-dd__HH-mm-ss" />
    </tstamp>
    
    <antcall target="zip-ios">
        <param name="tstamp" value="${build.tstamp}" />
    </antcall>
    
    <!-- build android second so that we can just remove the access tags -->
    <antcall target="zip-android">
        <param name="tstamp" value="${build.tstamp}" />
    </antcall>
        
</target>

<target name="zip-ios">
    <zip destfile="${dir.pkg.phonegap}${tstamp}-apple.zip">
        <zipfileset dir="${dir.pkg.tmp}">
            <exclude name="build.xml" />
            <exclude name="build.properties" />
            <exclude name="settings.xml" />
            <exclude name=".project" />
            <exclude name="**/*.psd" />
            <exclude name="assets/js/app.js" />
            <exclude name="assets/js/cordova-1.5.0.js" />
        </zipfileset>
    </zip>
</target>

<target name="zip-android">
    
    <!-- before building android zip, get rid of the <access> tags -->
    
    <zip destfile="${dir.pkg.phonegap}${tstamp}-android.zip">
        <zipfileset dir="${dir.pkg.tmp}">
            <exclude name="build.xml" />
            <exclude name="build.properties" />
            <exclude name="settings.xml" />
            <exclude name=".project" />
            <exclude name="**/*.psd" />
            <exclude name="assets/js/app.js" />
            <exclude name="assets/js/cordova-1.5.0.js" />
        </zipfileset>
    </zip>
</target>
    
<target name="prepare-for-build">
    
    <!-- increment build number -->
    <propertyfile file="build.properties">
        <entry key="version.build.number" type="int" operation="+" default="1"/>
    </propertyfile>
    <property file="build.properties"/>
    <echo message="BUILD NUMBER: ${version.build.number}"/>
    
    <delete includeemptydirs="true" verbose="false">
        <fileset dir="${dir.pkg.tmp}" includes="**/*"/>
    </delete>
    <filter token="BUILD_NUMBER" value="${version.build.number}" />
    <filter token="VERSION_MAJOR" value="${version.major}" />
    <filter token="VERSION_MINOR" value="${version.minor}" />
    <copy todir="${dir.pkg.tmp}" verbose="true" overwrite="true" filtering="true">
        <fileset dir="${dir.dev}" includes="**/*" />
    </copy>
    
</target>

そこに、zip-androidターゲットにコメントがあります:

<!-- before building android zip, get rid of the <access> tags -->

ここは交換したいところです。<filter>タスクと<replace>andを使用してみました<replaceRegExp>が、それを行う方法が見つからないようです。つまり、文字列を置き換える必要があるという事実に要約されます。<access ... />これらの置換方法はどれもallow<または>token/match/etc 属性で。CDATA を使用してみましたが、それも機能しませんでした。

ANTがエラーをスローしないという点で、私が最も近いのは次のとおりです。

<replace file="${dir.pkg.tmp}config.xml" failOnNoReplacements="true">
    <replacetoken>
        <![CDATA[<access origin="http://example.com" subdomains="true" />]]>
    </replacetoken>
</replace>

理論的には、属性を省略したため<access ... />、指定されたタグが空の文字列に置き換えられます。value

failOnNoReplacements残念ながら、属性と、何らかの理由で置換を行っていないという事実のために失敗します。

これは可能ですか?もしそうなら、私は何を間違っていますか?!

4

3 に答える 3

3

トークンと値の両方で XML 文字列の要素をエンコードすると、Ant 置換タスクが機能します。たとえば、次のようになります。

config.xml 内

    <option name="some.unwanted.configuration" />

build.xml 内

    <replace file="${build.dir}/config.xml"
        token="&lt;option name=&quot;some.unwanted.configuration&quot; /&gt;" 
        value="&lt;!-- unwanted configuration removed --&gt;"
    />

結果は

    <!-- unwanted configuration removed -->
于 2014-08-25T01:25:52.060 に答える
1

ハ、山かっこのブロックを回避するソリューションをまとめることができました。

config.xml で:

<!--access_tag1_here-->

build.xml で:

<replace 
    file="${dir.pkg.tmp}config.xml" 
    failOnNoReplacements="true"
    token="!--access_tag1_here--" 
    value="access origin='http://example.com' subdomains='true' /"
    />

これにより、コメントが必要なアクセス タグに変換されます。

zip の順序を変更して、コメントがまだコメントのままで Android が最初になり、次に iOS の zip プロセスがアクセス タグを挿入するようにしました。

于 2012-04-11T15:11:14.143 に答える
0

xml を扱うときは、xmltaskをお勧めします。
必要に応じて、次を参照してください: xml タスク マニュアルを置き換えます
。少しの Xpath の知識が役に立ちます。次を参照してください:
http://zvon.org/xxl/XPathTutorial/

于 2012-04-12T20:49:50.497 に答える