4

私のAndroidプロジェクトでは、すべての.javaビューファイルが現在のパッケージの名前に基づいてRファイルをインポートします。Android マニフェストでパッケージ名を変更する場合 (動的に、Eclipse やその他の IDE を介してリファクタリングするのではなく)、生成される新しい R ファイルを指すようにすべての Java ファイルの参照が必要です。

Ant 経由でビルド スクリプトを作成していますが、正規表現の規則がどのようになるかわかりません

置換が必要な文字列は次のようになります。

import com.mysite.myapp.R;

すなわち。

import com.sushiroll.california.R

これは、私のantビルドスクリプトにあるものです

<replaceregexp file="src/*"
           match="import*.R"
           replace="import ${current.package}.R"
           byline="true">
        <fileset dir="src/.">
            <include name="*.java"/>
        </fileset>
</replaceregexp>

importで終わるすべての文字列に一致させたい場所.R

そしてそれをimport $current.package}.R

アリの正規表現をどのように表現しますか? 私が書いたマッチと置換は単なる推測でした

4

2 に答える 2

2

.R の前に古いパッケージ名の文字をグループ化する必要があります

パッケージ名がわかれば

    match="import com\.mysite\.myapp\.R;"

パッケージ名はわかっているが、別のパッケージから R をインポートする場合、間違ったインポートで失敗することに備えてください。

    match="import (.*).R;"

に置き換えます

replace="import ${current.package}.R;"

そしてその

    <fileset dir="src">
        <include name="**/*.java"/>
    </fileset>
于 2012-10-05T19:26:13.907 に答える
1
<replaceregexp
   match="import .+?\.R;"
   replace="import ${current.package}.R;"
   flags="g"
> 
...

+?行に2つのインポートがある場合に機能するために必要であり、ファイルgごとに1つのインポートだけが置き換えられるのではなく必要です。現在、それらすべてを同じ文字列に置き換えるため、ファイルごとに1つしかありませんが、これは普遍的に正しい正規表現です...

于 2012-10-05T19:28:46.180 に答える