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
残念ながら、属性と、何らかの理由で置換を行っていないという事実のために失敗します。
これは可能ですか?もしそうなら、私は何を間違っていますか?!