我的问题类似于这个没有答案的问题:
我正在尝试将一堆所有共享相同代码库的Android项目(当然还有不同的软件包名称)转换为一个多味道的Android Studio/gradle项目.之前的每个应用程序都将成为新项目的构建风格.我从Eclipse导出并导入到Android Studio,并将其构建.
我的问题是,当我将com.company.appname的源代码重构为com.company.common时,带有"appname"风格,现在R文件仍然是com.company.appname.R.我无法从公共代码中引用它,因为下一个风格将包含com.company.otherappname.R.
这是我的build.gradle,如果这有用的话.
apply plugin: 'android'
android {
compileSdkVersion 19
buildToolsVersion "19.0.1"
defaultConfig {
minSdkVersion 8
targetSdkVersion 9
testPackageName "com.company.common.common"
testInstrumentationRunner "android.common.InstrumentationTestRunner"
}
buildTypes {
debug {
packageNameSuffix ".debug"
}
release {
runProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
productFlavors {
AppName {
packageName "com.company.appname"
}
}
}
dependencies {
some libraries and stuff
}
Run Code Online (Sandbox Code Playgroud)
我可以粘贴清单,如果这会有所帮助.我可以使用反射来破解解决方案,但这很讨厌并且在引用资源时放弃了所有编译时的安全性,我想避免这种情况.唯一的其他解决方案是不从任何公共代码引用R类?
由于所有风格共享代码,因此所有风格的R类都在同一个包中生成.这是宣布的包裹src/main/AndroidManifest.xml
构建系统将通过使所有flavor具有自己的包名称来处理此问题,但R类在任何地方都是相同的.(通常在清单中声明的包中生成R类的事实只是一个可以覆盖的默认值)
在设备或Play商店中识别应用时,不会使用或引用R类使用的包.在这种情况下,它是在使用的flavor中声明的packageName.
| 归档时间: |
|
| 查看次数: |
1060 次 |
| 最近记录: |