![](/img/trans.png)
[英]How to inspect element if there are multiple elements with same class name and doesn't have resource-id
[英]How to change app-id but keep the same resource-id?
在Android项目中,资源ID由应用程序ID完全标识。 例如,如果我的appid为com.mycompany.myapp,则资源ID为com.mycompany.myapp.R.blah。
就我而言,我需要创建该应用程序的两个版本-Beta版和发行版。 两种版本都可以安装在同一设备上。 仅当appid不同时,才会发生这种情况。 我的策略是,在每晚构建期间,我将以编程方式修改清单文件,并将appid更改为com.mycompany.myappbeta。 但是,如果执行此操作,则需要触摸许多使用资源ID的源文件。
我想知道清单文件中是否有一些标记,我可以在其中明确说明资源ID如何限定? 问候。
编辑
事实证明,应用程序ID和程序包ID确实是两个不同的概念。 我想更改app-id,但不更改package-id。 但是,看来这在Eclipse下是不可能的。 正如其他帖子所指出的那样,Gradle构建可以处理更改应用程序ID的同时保留包ID的问题。 我现在要移到Android Studio。
资源ID由应用程序ID完全标识
从技术上讲,它们是通过根清单中package
属性中的包名称来标识的。
我的策略是,在每晚构建期间,我将以编程方式修改清单文件,并将appid更改为com.mycompany.myappbeta。 但是,如果执行此操作,则需要触摸许多使用资源ID的源文件。
这就是为什么您的每晚构建应使用Gradle和Android的Gradle插件。 然后,您跳过所有描述的内容,而是使用构建类型。 预先定义了两种构建类型( debug
和release
),如果您想发明另一种构建类型(例如beta
),则可以。 然后,在build.gradle
文件中的构建类型配置中,使用applicationIdSuffix
为非release
构建提供不同的后缀。 为了唯一安装的目的,它将被添加到应用程序ID中,但是您的软件包名称不会受到影响,因此您的资源也不会受到影响。
例如:
android {
compileSdkVersion 19
buildToolsVersion "21.1.2"
defaultConfig {
versionCode 2
versionName "1.1"
minSdkVersion 14
targetSdkVersion 18
}
signingConfigs {
release {
storeFile file('HelloConfig.keystore')
keyAlias 'HelloConfig'
storePassword 'laser.yams.heady.testy'
keyPassword 'fw.stabs.steady.wool'
}
}
buildTypes {
debug {
applicationIdSuffix ".d"
}
release {
signingConfig signingConfigs.release
}
beta.initWith(buildTypes.release)
beta {
applicationIdSuffix ".beta"
debuggable true
}
}
}
我在这:
给debug
构建类型一个应用程序ID后缀.d
从应用程序ID后缀的角度出发,保留release
版本的类型
创建一个新的beta
构建类型(从release
构建类型中克隆),在其中给我一个.beta
应用程序ID后缀并将其标记为可调试
但是,如果执行此操作,则需要触摸许多使用资源ID的源文件。
不,你不会的。 您只需要更改清单文件中的包ID,确保清单文件中列出的所有服务和活动都使用完整的类路径,即:
android:name="com.mycompany.myapp.MainActivity"
不只是简写:
android:name=".MainActivity"
因为当包ID与您的代码包不匹配时,这会使您的应用无法正常工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.