我有两个包,例如packageA
和packageB
。
在packageA中,我有一个名为classA
的类,它从R.java
获取资源:example:
TextView textView = (TextView) findViewById(R.id.textView);
与包B相同。我有一个名为classB
的类,它从R.java
获取资源
EditText editText = (EditText) findViewById(R.id.EditText);
当我希望android运行classB
时,我必须更改Android Manifest file
,将默认包从com.packageA
更改为com.packageB
,因此classA会在上面的行中发现错误。当我逆转时也一样。
那么,我该如何解决这个问题:使用多个包,其中很多都使用Resource data
。请帮帮我。
谢谢:)
答案 0 :(得分:3)
如果清单中指定的包是com.packageA
,那么在packageA的文件中,您不需要做任何事情。在packageB
的文件中,使用import com.packageA.R;
而不更改清单中的包名称。这样,您的packageB可以访问R.java文件。
答案 1 :(得分:1)
您无需在清单文件中提及所有包。只需声明A类包并运行该程序。但是请确保在要调用它的java类中导入类B的包。清单文件默认声明您在创建新的android项目时提到的第一个包。
如果这解决了您的问题,请告诉我
答案 2 :(得分:0)
我遇到了同样的问题,因为我是用不同的资源向另一个项目分配项目,因为我使用scala(2.8.3)和treeshaker,插件不允许我正确使用android库项目。 / p>
我通过使用ant添加自定义构建步骤解决了这个问题,该步骤在我想要的包中创建了R.java的副本。
我在项目MyProjectExtended的根目录中添加了一个名为custom_rules.xml
的文件,其中包含以下内容:
<?xml version="1.0" encoding="UTF-8"?>
<project name="MyProjectExtended" default="debug">
<condition property="exe" value=".exe" else=""><os family="windows" /></condition>
<property name="aapt" location="C:\Program Files (x86)\Android\android-sdk\platform-tools\aapt${exe}" />
<property name="android.jar" location="C:\Program Files (x86)\Android\android-sdk\platforms\android-10\android.jar" />
<!-- Generates the R.java file for this project's resources. -->
<target name="debug">
<echo>Generating R.java / Manifest.java from the resources...</echo>
<exec executable="${aapt}" failonerror="true">
<arg value="package" />
<arg line="" />
<arg value="-m" />
<arg value="-J" />
<arg path="gen" />
<arg value="-M" />
<arg path="AndroidManifest.xml" />
<arg value="-S" />
<arg path="res" />
<arg value="-I" />
<arg path="${android.jar}" />
<arg value="--custom-package" />
<arg value="com.MyProjectExtendedPackage" />
</exec>
</target>
</project>
然后我添加了自定义构建步骤:
${workspace_loc:/MyProjectExtended/custom_rules.xml}
${workspace_loc:/MyProjectExtended}
如果控制台弹出窗口很烦人,您可以在名为“构建选项”的选项卡中将其禁用