在android studio中使用大写包名称制作apk

时间:2017-08-10 03:56:07

标签: android eclipse android-studio google-play package

在我们开始之前,让我解释一下这些假设:

  1. 我意识到拥有大写的包名是不好的惯例。在我的情况下,我们正在处理第三方发布的具有大写包名称的Android应用程序,不幸的是,应用程序有数百万次下载,因此重新发布不是一种选择。

  2. 我已完成广泛的研究,无法找到解决方案,最接近的SO问题是thisthis以及this

  3. 问题:

    App最初是使用eclipse开发的,它可以创建具有大写包名称的签名应用程序。应用程序必须立即移动到AS,拒绝生成带有大写包名称的已签名apk。请参阅以下错误:

    enter image description here

    以下是我的清单文件的相关部分:

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="TESTING.CAPITALIZED"
    
    ...
    
    <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />
    
    <activity
            android:name="TESTING.CAPITALIZED.Activity_xxx"
    ...
    

    请注意我已尝试将标记为活动标记的命名约定更改为:(但同样的错误)

    <activity
            android:name=".Activity_xxx"
    ...
    

    问题:

    我们需要Android Studio中的方法/黑客来解决这个问题。我不在乎如何或者如果它涉及魔法,如编辑dll,需要在AS中生成签名的apk。

    其他调查结果:看来在Android Studio中,只要包中的第一个字母是小写,我们就可以编译并生成apk。例如,在我的示例中,如果我将项目重构为zTESTING.CAPITALIZED,我可以成功生成apk。但是,这并不能解决我的问题,因为我的客户的软件包名称都是大写字母。

2 个答案:

答案 0 :(得分:2)

如果有人正在寻找答案,则Android Studio 3.0 RC1中已解决此问题。如果您遇到任何问题,请参阅Google问题跟踪器并进行更新 https://issuetracker.google.com/issues/64595077

答案 1 :(得分:1)

我找到了INSTALL_PARSE_FAILED_MANIFEST_MALFORMED的解决方案 AndroidManifest.xml中的eclipse和android studio项目之间的区别

在Eclipse的活动路径中:

<activity android:name="WinActivity">
Android Studio中的

<activity android:name="Com.my.package.WinActivity">

AS中大写字母的问题仅在AndroidManifest中所有Activity的路径中;因为Android Studio始终合并清单文件,并填写所有Activity的完整路径;

如果你从AS编译apk,打开它apktools,更改AndroidManifest.xml(更改路径到<activity android:name="WinActivity">)并使用apktools制作apk。一切都会奏效。

解决此问题的第二种方法: 将所有java文件移动到另一个包含小写字母的包中。例如some.new.package。 带大写字母的套餐将保持空白。 在AndroidManifest.xml中 - 您需要设置所有活动的完整路径。

<activity android:name="some.new.package.WinActivity">`

包装在清单中你老了;

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

    package="Com.my.package"

并在build.gradle中保留旧包:

applicationId "Com.my.package"

如果您在班级中看到R类并出现错误。只需在需要时在所有类中导入Com.my.package.R。