如何使用python更改AndroidManifest中的versionCode和versionName?

2024-06-16 14:41:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在构建/签署apk之前设置versionCode和versionName。生成和签名运行时没有错误。在

问题是,当我尝试启动应用程序时,它崩溃了,我发现了NoClassDefFoundError,并分配了关于未知权限的警告。在

如果我在eclipse中打开项目而不改变AndroidManifest.xml并运行“导出签名应用程序包”。我也犯了同样的错误。在

如果我添加一个空间,删除它,并保存AndroidManifest.xml应用程序运行正常。在

这至少会让我明白这是一个编码问题。下面是我用来更改版本的代码。在

fh,abs_path = mkstemp()
file_path = 'AndroidManifest.xml'
old_file = open(file_path)
new_file = open(abs_path,'w')
for line in old_file:
    line = re.sub(r'android:versionCode=".*?"','android:versionCode="%s"' %    version_code,line)
    line = re.sub(r'android:versionName=".*?"','android:versionName="%s"' % version_name,line)
    new_file.write(line)
new_file.close()
close(fh)
old_file.close()
remove(file_path)
move(abs_path, file_path)

我也尝试过这样做来执行utf-8。我不确定清单应该有什么编码。在

^{pr2}$

我试过像这样检查编码,但它也有同样的错误。在

file -bi AndroidManifest.xml 
application/xml; charset=us-ascii

有人知道怎么解决这个问题吗?在


Tags: path编码newclose错误lineabsxml
1条回答
网友
1楼 · 发布于 2024-06-16 14:41:37

问题是Android manifest想要LF作为新行,正如Michael Butscher所说。为了实现这一点,我不得不使用io.open并将new line设置为'\n'。我认为这是安卓系统的一个缺陷,谷歌应该修复它AndroidXML清单支持所有常见类型的换行符。在

fh,abs_path = mkstemp()
file_path = 'AndroidManifest.xml'

old_file = open(file_path, 'r')
new_file = io.open(abs_path,mode='w', newline='\n')

for line in old_file:
        line = re.sub(r'android:versionCode=".*?"','android:versionCode="%s"' % version_code,line)
        line = re.sub(r'android:versionName=".*?"','android:versionName="%s"' % version_name,line)
        new_file.write(line.decode('utf-8'))

new_file.close()
close(fh)
old_file.close()
remove(file_path)
move(abs_path, file_path)

相关问题 更多 >