Android 的主屏幕上有两个不同的 Opera Mini 4.2 的图标

在 Android 里,同一程序的不同版本是不能共存的,安装了一个版本再安装另一个版本,则之前安装的那个版本会被覆盖或者被取代,这导致我们不能同时使用两个版本。然而,由于兲朝的某些设备,有时有必要安装两个版本。比如 Opera Mini 4.2 的国际版(中转服务器)和 Opera Mini 4.2 的中国版。有人会说:不是有 Opera Mini 5.x 吗?没错,那个版本的确能与 4.2 共存,但是它实在太烂了,所以能安装两个不同的 4.2 版本(不同点仅在服务器地址),一直是我的夙愿。经过一段时间的折腾,我成功了。本教程就将简要介绍制作方法。本文的环境以 Windows 为例,也适用于 Unix-like OS。本文关键字:多版本 Android 应用共存。

一、准备工具

  • JRE。可在 Java.com 上下载。已经安装过 JRE 或者 JDK 的用户可以跳过。
  • Notepad++。一款上手好用的文本编辑器是很重要的,不要用落后的 Windows 记事本了,它会把 Unix 换行符破坏的。当然如果是你是 Unix-like OS 用户,可以跳过此步。
  • android-apktool。这个工具是用来反编译 .apk 文件的。注意要下载两个压缩包,然后解压到同一目录里才能使用,详细使用方法见它的说明。另外,建议将此工具的路径添加到 PATH 变量里,以方便下面的使用,以下教程假设你已经把它添加到 PATH 里了,所以不再写完整路径。如果你不知道如何添加 PATH,则直接把 apktool 的几个文件复制到 %systemroot% 里好了。
  • Auto-Sign。这是一个签名工具。解压到某目录备用。
  • 原版的 Opera Mini 4.2 for Android。这东西在 Opera 官方网站等地方已经下载不到了,但是在 Opera 的合作伙伴 GetJar.com 上倒还是能找到,虽然页面上标注的版本是 5,但是下载下来其实是原版的 4.2……真有趣。(如果刚才那个地址失效了,请点击这里下载。)
  • 足够的耐心。

二、制作 Opera Mini 4.2 for Android 改服版(中转服务器)

这一部分的制作在这里也有教程,但是方法较繁琐且叙述不是很清楚,以下的教程更清楚一些。

  1. 反编译 apk 文件。把上面下载到 OperaMini.apk 放到顺手的工作路径下,比如 %userprofile%下面。并在 cmd 窗口里执行以下命令:
    Microsoft Windows [Version 6.1.7600]
    Copyright (c) 2009 Microsoft Corporation.  All rights reserved.
    
    C:\Users\wzyboy>apktool d OperaMini.apk
    I: Baksmaling...
    I: Loading resource table...
    I: Decoding resources...
    I: Loading resource table from file: C:\Users\wzyboy\apktool\framework\1.apk
    I: Copying assets and libs...
    
    C:\Users\wzyboy>
  2. 修改服务器地址。执行完成后用 Notepad++ 打开新出现的 OperaMini\smali\Code.smali 文件,定位到第 41 行和第 47 行,这里可以看到两个服务器地址,前者是 socket 连接用的,后者是 http 连接用的。如果你知道某个支持 socket 的德意志服务器的地址的话,就把它们填写进去吧。更推荐的方法是用第三方的中转服务器,由于第三方的服务器只支持 http,所以需要把前者的地址“破坏”掉,比如改成 fuck://gfw.tld/ 这样的。而后者则改成完成的第三方中转服务器地址。网上有很多公开的中转服务器的地址,搜索一下便可抓到一些,如果要自己搭建的话,教程见这里。
  3. 重新打包。在 cmd 窗口里执行以下命令即可:
    C:\Users\wzyboy>apktool b OperaMini
    I: Checking whether sources has changed...
    I: Smaling...
    I: Checking whether resources has changed...
    I: Building resources...
    I: Building apk file...
  4. 重新签名。把 OperaMini\disk\OperaMini.apk 复制到 Auto-Sign 的目录下面,把扩展名改为 zip ,然后双击 sign.bat,按提示按下两次任意键,如果一切正常的话,应该是这样的:
    Auto-Sign Created by Dave Da illest 1
    Edited to be easier to use with APK files by mixpix405
    
    Make sure the APK you want signed is the only APK inside this folder
    Press any key to continue . . .
    
    .apk is now being signed. The signed version be named your_app_signed.apk
    
    If no errors, signing complete. If you DO see errors, good luck figuring it out, as I will be absolu
    tely no help :)
    
    Press any key to continue . . .
  5. 现在可以把这个文件传输到安装了。

三、制作 Opera Mini 4.2 for Android 中国版(共存版)

Opera Mini 国际版的好处大家都心知肚明,但国服版也有优势——浏览国内网站的速度非常快。我经常在手机淘宝上买东西,如果用国际版服务器访问手机淘宝的话,那个速度真是令人抓狂。但是,由于两个版本的 Package 名称是相同的,所以无法同时安装,安装了一个另一个就被卸载了,所以,要对这个版本做一些小小的手术。我搜索了一下,中文和英文的 Android 网站里,完全没有多版本 Android 应用程序共存的解决方案(不知道别的语言有没有),不过,在这位仁兄的指导下,我终于折腾出来了。这应该是第一篇公开的多版本 Android 应用共存的教程吧……?下面说步骤:

第一部分

  1. 反编译。方法见上文。
  2. 修改服务器地址。这回应该修改成中国版的服务器地址,当然是有 socket 连接的(真棒):
    socket://59.151.106.229:1080
    http://59.151.106.229:80/
  3. 获取 Server key。一开始我没有做这一步,结果失败了很多次,悔死了。Server key 是一串 320 个字符长度的数字与字母组合。不同的服务器不同的 Opera Mini 版本的 Server key 是不同的,对于 4.2 版本来说,主要是两组,一组是兲朝服务器,一组是国际版服务器,由于国际版服务器的 Server key 是通用的,所以之前把国际版改成中转的国际版的过程不需要修改 Server key,而把国际版改成中国版则要修改的。Server key 可以从官方的中国版里提取,我已经提取出来了。由于 Server key 太长,为了不撑破 Opera Mini 用户的页面,我把它单独放到一个文本文件里了,请点击此处打开这个文本文件。把文件里中国版的 Server key 复制下来备用。
  4. 修改 Server key。一开始我并不知道 Server key 在哪里改,于是花了很大的精力在那 400 多个 .smali.xml 文件里找,找的过程是□□□□□□□□□□□□□□□□□□□□□(此处删去 1024 字),最后终于发现它在 OperaMini\smali\ad.smali 文件里。用 Notepad++ 打开这个一共有 5987 行的文件,定位到第 192 行,看到那个长长的字符串了吧?用刚才获取的 Server key 替换它吧。
  5. 修改 AndroidManifest.xml 及其它。这一步是使两个版本共存的关键,也是比较麻烦的一步。为了搞定它,我□□□□□□□□□□□□□□□□□□□□□(此处删去 1024 字),最后终于成功了。下面详解:

第二部分

  1. 用 Notepad++ 打开 OperaMini\AndroidManifest.xml ,内容如下:
    <?xml version=”1.0″ encoding=”UTF-8″?>
    <manifest android:versionCode=“6” android:versionName=“4.2” package=“org.microemu.android.Browser”
    xmlns:android=“http://schemas.android.com/apk/res/android”>
    <uses-permission android:name=“android.permission.INTERNET” />
    <uses-sdk android:minSdkVersion=“1” />
    <application android:label=“@string/app_name” android:icon=“@drawable/app_icon”>
    <activity android:name=“org.microemu.android.MicroEmulator” android:configChanges=“keyboardHidden|orientation”>
    <intent-filter>
    <action android:name=“android.intent.action.MAIN” />
    <category android:name=“android.intent.category.LAUNCHER” />
    </intent-filter>
    </activity>
    </application>
    </manifest>
  2. 注意底色为黄色的那一部分,那就是 Opera Mini 4.2 for Android 的 Package name,正是由于两个版本的 Package name 是相同的,所以无法共存(同时安装),我们需要把它改掉,比如改成 org.microemu.android.Browser 。但是这里先不要改,待会儿再改。
  3. 当然,只改这个 Package name 是不行的,事实证明,只改动它,最后编译出来的 .apk 文件虽然可以正常安装,但是是无法运行的,一运行就直接 FC。所以还要改动一些东西,经过我□□□□□□□□□□□(此处删去 512 字)的折腾,最终发现需要改动的东西如下:

第三部分

  1. 打开 Notepad++,按 Ctrl+Shift+F 打开 Find in Files 对话框,在 Find what 里填写 Browser,在 Replace with 里填写 cnBrowser,在 Filter 里填写 *.smali; *.xml ,把 Directory 设为 Opera Mini 反编译后的文件所在的目录,然后点击 Replace in Files 按钮,等待几秒钟,替换完成,关闭之。
  2. 还有两个地方要修改。一个是 OperaMini\smali\Browser.smali ,把它的文件名改成 cnBrowser.smali。另一个是 OperaMini\smali\org\microemu\android\Browser ,这是一个目录,把它的名字也改成 cnBrowser

第四部分

  1. 重新打包。方法见上文。
  2. 重新签名。方法见上文。
  3. 传输到手机里安装吧!

美化

  • 安装好之后的效果就像本文的题图那样,有两个 Opera Mini 4.2 的图标,怎样区分呢?一个比较好的方法是改图标。在完成上文第三部分的操作之后,可以修改 OperaMini\res\drawable\app_icon.png 文件,比如加一个“Chinternet”标志之类的。我则是直接把它改成了灰度图(喜欢就右击保存吧):opera-mini-4-greyed-icon

四、写给懒人

好吧好吧,肯定有人认为上面的步骤太繁琐了……于是,我添加了这一节,提供已经修改好的 Opera Mini 4.2 for Android 中国服务器共存版下载

om4-android-cn-nnic-final-signed.apk

五、其它

  • 正如之前所说,本文修改 Opera Mini 4.2 的方法也可以活用于其它的程序,使程序的不同版本能够共存于 Android 之中,希望能够帮到未来的读者。
  • 我还有5个月就高考了,压力很大,博客更新得越来越低频了。不过自我感觉文章质量并没有下降。这篇文章我花了不少心思写的,如果你看完觉得它还不错的话,可以点击此处添加点评论什么的……Google Reader 用户可以按一下键盘上的 l 键表示你喜欢这篇文章 ^_^ 。没有订阅本博客的用户可以点此订阅
  • 转载本文请注明出处:https://wzyboy.im/post/635.html,谢谢合作。

六、补充

这个补充是来自本文发表半年后的了……有人做了一个 6.0 版的共存版的教程,见此


欢迎留下评论。评论前,请先阅读《隐私声明》。