我正在尝试在构建/签署 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。我不确定清单应该有什么编码。
line = re.sub(r'android:versionCode=".*?"',u'android:versionCode="%s"' % version_code,line)
line = re.sub(r'android:versionName=".*?"',u'android:versionName="%s"' % version_name,line)
new_file.write(line.encode('utf-8'))
我试图检查这样的编码,但它得到了同样的错误。
file -bi AndroidManifest.xml
application/xml; charset=us-ascii
有人知道如何解决这个问题吗?