精华内容
下载资源
问答
  • 安卓软件版本号修改工具主要的功能是修改软件名称版本及软件图标,内部文字,很多时候我们下载一个安卓软件,被别人了名,不知道版本号到底是哪个,用安卓软件版本号修改工具也可以快速的可看到。
  • Android修改APP版本号

    万次阅读 2016-09-19 14:28:34
    Android修改APP版本号

    Android:versionCode和Android:versionName

    在eclipse中,修改我们开发的应用的版本号只需要在清单文件AndroidManifest.xml中manifest 标签节点中加入android:versionCode和android:versionName的值即可设置应用的版本号。如以下代码:
    代码片段

    上述代码表示应用的包名为cn.wangbaiyuan.translate,版本号code:2,版本名Name:1.1;前者一般是给开发者比较版本是否有升级用的,后者是展示给用户看的。
    这里写图片描述

    在Eclipse中使用修改AndroidManifest.xml修改版本号是完全没有问题的,但是本人使用的是Android Studio,仅仅修改AndroidManifest.xml内容并没有完全改过来,在系统弹出的安装提示框里,那个旧版本的版本号并不因AndroidManifest.xml的修改而变化。
    这里写图片描述

    AndroidStudio开发安卓应用设置版本号

    后来才发现是Android Studio中build.gradle(Module:app)配置文件同样设置了它的版本号,在和AndroidManifest.xml填写的版本号冲突的情况下,编译后的APK使用了build.gradle(Module:app)里面的配置:

    build.gradle(Module:app)

    这里写图片描述

    解决方法

    在项目文件夹下找到build.gradle(Module:app)文件,删除defaultConfig里面VersionCode 和VersionName这两行;或者直接在这里修改版本号。

    展开全文
  • os:android7.1客户需求:整个板子的软件程序由系统软件和mcu软件组成,mcu软件每次烧录了新版本之后,需要也能显示出来版本号。解决方案:可以参照android版本号,做一个拼接的显示。因此要捋顺android版本号的...

    os:android7.1

    客户需求:整个板子的软件程序由系统软件和mcu软件组成,mcu软件每次烧录了新版本之后,需要也能显示出来版本号。

    解决方案:可以参照android的版本号,做一个拼接的显示。

    因此要捋顺android版本号的整个显示流程。

    1.在文件 packages/apps/Settings/src/com/android/settings/DeviceInfoSettings.java 中:

    setStringSummary("build_number", Build.DISPLAY);

    指定了设置--关于设备--版本号。

    2.Build.DISPLAY即Build类中的 DISPLAY 变量,在文件frameworks/base/core/java/android/os/Build.java 中:

    public static final String DISPLAY = getString("ro.build.display.id");

    3.当 android 系统跑起来 之后,会读取 /system/build.prop 文件里 对应的 字符串;

    ro.build.display.id=xxxxxx;

    4.ro.build.display.id在文件build/tools/buildinfo.sh中:

    echo "ro.build.display.id=$BUILD_DISPLAY_ID"

    build/tools/buildinfo.sh 文件 会把 内容 写到 /system/build.prop 文件里,供 java文件 读取.

    5.通过读写文件的方式,读取版本号:

    +       private static final String MUC_VERSION = "/sys/android_pic/mcu_version";

    public staticString GetMcuVersion(String paramString) {+ File localFile = newFile(paramString);+ String result = "wmc";+ Log.v("wmc", "mcu path=" +paramString);+ if (!localFile.exists())+ System.out.println(paramString + "not exist!");+

    + try{+ FileInputStream fis = newFileInputStream(localFile);+ BufferedReader br = new BufferedReader(newInputStreamReader(fis));+ result =br.readLine();+ //System.out.println("版本 = "+result);

    +br.close();+ } catch(Exception e) {+ //TODO Auto-generated catch block

    +e.printStackTrace();+}+

    + returnresult;+ }

    @Override

    public void onCreate(Bundle icicle) {

    super.onCreate(icicle);

    + //wmc add

    + String mcuversion = GetMcuVersion(MUC_VERSION);

    + Log.d("wmc","mcuversion is:" + mcuversion);

    +

    +

    addPreferencesFromResource(R.xml.device_info_settings);

    说明:MUC_VERSION是要读取的文件路径,其是kernel底层实现的一个sysfs接口,该接口实现通过cpu与mcu的i2c通信,读取mcu发过过来的数据,上层应用再读该文件。底层怎样实现这里不做阐述。每次打开系统设置-关于设备时,DeviceInfoSettings.java都会onCreate一次,String mcuversion = GetMcuVersion(MUC_VERSION);都会读取一次.

    5.把读取到的mcu版本号与系统版本号拼接显示:

    通过前面的分析,可知版本号是setStringSummary("build_number", Build.DISPLAY);实现的。所以,可做个简单的如下写法:

    setStringSummary(KEY_BUILD_NUMBER, Build.DISPLAY+"&"+mcuversion);

    参考:https://www.cnblogs.com/codeking100/p/10239224.html

    https://www.jb51.net/article/186258.htm

    展开全文
  • 修改Android系统的软件版本号

    万次阅读 2018-04-24 20:08:45
    Android系统中有几个版本号经常遇到,有时还要做特殊处理。下面整理一下,这些都保留在文件系统的/system/build.prop文件里,build.prop相当于Windows下的注册表,这个文件内定义了系统初始(或永久)的一些参数...

    在Android系统中有几个版本号经常遇到,有时还要做特殊处理。下面整理一下,这些都保留在文件系统的/system/build.prop文件里,build.prop相当于Windows下的注册表,这个文件内定义了系统初始(或永久)的一些参数属性、功能的开放等。

    下面的代码均是基于Android8.1分析。

    系统设置--关于手机--版本号

    1、在系统设置代码中搜索“版本号”,AndroidStudio中全局搜索快捷键“Ctrl+Shift+f”。

    <string name="build_number" msgid="3075795840572241758">"版本号"</string>

    全局搜索“build_number”,找到com.android.settings.deviceinfo.BuildNumberPreferenceController类。

    private static final String KEY_BUILD_NUMBER = "build_number";
        public void displayPreference(PreferenceScreen screen) {
            super.displayPreference(screen);
            final Preference preference = screen.findPreference(KEY_BUILD_NUMBER);
            if (preference != null) {
                try {
                    preference.setSummary(BidiFormatter.getInstance().unicodeWrap(Build.DISPLAY));
                    preference.setEnabled(true);
                } catch (Exception e) {
                    preference.setSummary(R.string.device_info_default);
                }
            }
        }

    此时关键就是找到Build.DISPLAY。

    这里是定义在android.os.Build类中,该类位于frameworks/base/core/java目录下,如下:

        /** A build ID string meant for displaying to the user */
        public static final String DISPLAY = getString("ro.build.display.id");
        private static String getString(String property) {
            return SystemProperties.get(property, UNKNOWN);
        }

    我们看到了DISPLAY是Build类中的静态变量,表示“ro.build.display.id”的属性值。

    2、此时我们就需要知道“ro.build.display.id”属性值是在哪里定义的。

    这里我们在Android源码环境下全局搜索“ro.build.display.id”,命令:grep -r "ro.build.display.id" ./

    其实只在build目录下搜索即可,build存放系统编译规则。

    在build/make/tools/buildinfo.sh文件中搜索出:

    echo "ro.build.display.id=$BUILD_DISPLAY_ID"

    我们继续在build目录下,搜索“BUILD_DISPLAY_ID”,命令:grep -r "BUILD_DISPLAY_ID"。在文件build/make/core/MakeFile中搜索出:

    # Display parameters shown under Settings -> About Phone
    ifeq ($(TARGET_BUILD_VARIANT),user)
      # User builds should show:
      # release build number or branch.buld_number non-release builds
    
      # Dev. branches should have DISPLAY_BUILD_NUMBER set
      ifeq (true,$(DISPLAY_BUILD_NUMBER))
        BUILD_DISPLAY_ID := $(BUILD_ID).$(BUILD_NUMBER_FROM_FILE) $(BUILD_KEYS)
      else
        BUILD_DISPLAY_ID := $(BUILD_ID) $(BUILD_KEYS)
      endif
    else
      # Non-user builds should show detailed build information
      BUILD_DISPLAY_ID := $(build_desc)
    endif

    BUILD_ID定义在build/make/core/build_id.mk中,如下:

    # BUILD_ID is usually used to specify the branch name
    # (like "MAIN") or a branch name and a release candidate
    # (like "CRB01").  It must be a single word, and is
    # capitalized by convention.
    
    export BUILD_ID=OPM1.171019.011

    BUILD_NUMBER_FROM_FILE定义在build/make/core/main.mk中,如下:

    BUILD_NUMBER_FROM_FILE := $$(cat $(OUT_DIR)/build_number.txt)

    这里OUT_DIR就是out目录,build_number.txt就是在out目录下生成的一个文件,内容如下:

    eng.sgf.20180421.152052

    这里是eng版本。

    BUILD_KEYS定义在build/make/core/MakeFile中,表示系统签名,test-keys只适用于开发阶段。如下:

    # The "test-keys" tag marks builds signed with the old test keys,
    # which are available in the SDK.  "dev-keys" marks builds signed with
    # non-default dev keys (usually private keys from a vendor directory).
    # Both of these tags will be removed and replaced with "release-keys"
    # when the target-files is signed in a post-build step.
    ifeq ($(DEFAULT_SYSTEM_DEV_CERTIFICATE),build/target/product/security/testkey)
    BUILD_KEYS := test-keys
    else
    BUILD_KEYS := dev-keys
    endif
    如果不是user版本,BUILD_DISPLAY_ID的取值就是$(build_desc)
    # A human-readable string that descibes this build in detail.
    build_desc := $(TARGET_PRODUCT)-$(TARGET_BUILD_VARIANT) $(PLATFORM_VERSION) $(BUILD_ID) $(BUILD_NUMBER_FROM_FILE) $(BUILD_VERSION_TAGS)


    BUILD_NUMBER定义在build/make/core/version_default.mk文件中,如下:

    ifndef BUILD_NUMBER
      # BUILD_NUMBER should be set to the source control value that
      # represents the current state of the source code.  E.g., a
      # perforce changelist number or a git hash.  Can be an arbitrary string
      # (to allow for source control that uses something other than numbers),
      # but must be a single word and a valid file name.
      #
      # If no BUILD_NUMBER is set, create a useful "I am an engineering build
      # from this date/time" value.  Make it start with a non-digit so that
      # anyone trying to parse it as an integer will probably get "0".
      BUILD_NUMBER := eng.$(shell echo $${USER:0:6}).$(shell $(DATE) +%Y%m%d.%H%M%S)
    endif

    总结:想要修改版本号,可以通过两个部分修改。

    1、修改Java文件,直接写死;

    2、修改编译系统,在device中修改。

    https://blog.csdn.net/codingnotes/article/details/62222656


    系统设置--蓝牙--手机名称

    1、手机名称的修改,定位到LocalDeviceNameDialogFragment中,如下:

        @Override
        protected String getDeviceName() {
            if (mLocalAdapter != null && mLocalAdapter.isEnabled()) {
                return mLocalAdapter.getName();
            }
            return null;
        }
    
        @Override
        protected void setDeviceName(String deviceName) {
            mLocalAdapter.setName(deviceName);
        }
        private LocalBluetoothAdapter mLocalAdapter;

    frameworks/base/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothAdapter.java

        public String getName() {
            return mAdapter.getName();
        }
        /** This class does not allow direct access to the BluetoothAdapter. */
        private final BluetoothAdapter mAdapter;

    frameworks/base/core/java/android/bluetooth/BluetoothAdapter.java

        public String getName() {
            try {
                return mManagerService.getName();
            } catch (RemoteException e) {Log.e(TAG, "", e);}
            return null;
        }
    BluetoothManagerService.java
        public String getName() {
            mContext.enforceCallingOrSelfPermission(BLUETOOTH_PERM,
                                                    "Need BLUETOOTH permission");
    
            if ((Binder.getCallingUid() != Process.SYSTEM_UID) &&
                (!checkIfCallerIsForegroundUser())) {
                Slog.w(TAG,"getName(): not allowed for non-active and non system user");
                return null;
            }
    
            try {
                mBluetoothLock.readLock().lock();
                if (mBluetooth != null) return mBluetooth.getName();
            } catch (RemoteException e) {
                Slog.e(TAG, "getName(): Unable to retrieve name remotely. Returning cached name", e);
            } finally {
                mBluetoothLock.readLock().unlock();
            }
    
            // mName is accessed from outside.
            // It alright without a lock. Here, bluetooth is off, no other thread is
            // changing mName
            return mName;
        }
    mName = Settings.Secure.getString(mContentResolver, SECURE_SETTINGS_BLUETOOTH_NAME);

    这里的bluetooth_name保存在/data/system/users/0/settings_secure.xml文件中。

    在 Android6.0版本时,SettingsProvider被重构,Android 从性能、安全等方面考虑,把SettingsProvider 中原本保存在settings.db中的数据,目前全部保存在 XML 文件中。

    具体修改地方:

    device/qcom/common/bdroid_buildcfg.h

    #define BTM_DEF_LOCAL_NAME   "Acuteag-P6"

    MTK平台,修改device目录下custom.conf文件中的bluetooth.HostName的值。


    热点--设置WLAN热点--修改名称

    在Settings的WifiTetherSSIDPreferenceController类中,获取WiFiConfiguration的SSID。

        @Override
        public void displayPreference(PreferenceScreen screen) {
            super.displayPreference(screen);
            final WifiConfiguration config = mWifiManager.getWifiApConfiguration();
            if (config != null) {
                mSSID = config.SSID;
            } else {
                mSSID = DEFAULT_SSID;
            }
            ((ValidatedEditTextPreference) mPreference).setValidator(this);
            updateSsidDisplay((EditTextPreference) mPreference);
        }

    在WiFiManager类中的getWifiApConfiguration()方法如下:

        public WifiConfiguration getWifiApConfiguration() {
            try {
                return mService.getWifiApConfiguration();
            } catch (RemoteException e) {
                throw e.rethrowFromSystemServer();
            }
        }
        IWifiManager mService;

    如果不知道是哪个类继承IWiFiManager.Stub,可以搜索该字符串。

    frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiServiceImpl.java

        @Override
        public WifiConfiguration getWifiApConfiguration() {
            enforceAccessPermission();
            int uid = Binder.getCallingUid();
            // only allow Settings UI to get the saved SoftApConfig
            if (!mWifiPermissionsUtil.checkConfigOverridePermission(uid)) {
                // random apps should not be allowed to read the user specified config
                throw new SecurityException("App not allowed to read or update stored WiFi Ap config "
                        + "(uid = " + uid + ")");
            }
            mLog.info("getWifiApConfiguration uid=%").c(uid).flush();
            return mWifiStateMachine.syncGetWifiApConfiguration();
        }
    frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiStateMachine.java
        public WifiConfiguration syncGetWifiApConfiguration() {
            return mWifiApConfigStore.getApConfiguration();
        }

    frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiApConfigStore.java

        private WifiConfiguration getDefaultApConfiguration() {
            WifiConfiguration config = new WifiConfiguration();
            config.SSID = mContext.getResources().getString(
                    R.string.wifi_tether_configure_ssid_default) + "_" + getRandomIntForDefaultSsid();
            config.allowedKeyManagement.set(KeyMgmt.WPA2_PSK);
            String randomUUID = UUID.randomUUID().toString();
            //first 12 chars from xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx
            config.preSharedKey = randomUUID.substring(0, 8) + randomUUID.substring(9, 13);
            return config;
        }
    最后全局搜索字符串wifi_tether_configure_ssid_default,定位到frameworks/base/core/res/res/values/strings.xml,如下:
        <!-- Do not translate. Default access point SSID used for tethering -->
        <string name="wifi_tether_configure_ssid_default" translatable="false">AndroidAP</string>

    正好匹配起来,修改上面strings.xml文件中的字符串值即可。


    最后,上一篇好文章:

    Android系统默认参数的修改

    展开全文
  • Android软件版本号

    2017-03-10 15:16:48
    一种常见软件版本号的形式是major.minor.maintenance.build: major是主版本号,一般在软件有重大升级时增长 minor是次版本号,一般在软件有新功能时增长 maintenance是维护版本,一般在软件有主要的问题...

    一种常见软件版本号的形式是major.minor.maintenance.build:

    • major是主版本号,一般在软件有重大升级时增长
    • minor是次版本号,一般在软件有新功能时增长
    • maintenance是维护版本,一般在软件有主要的问题修复后增长
    • build是构建版本,一般只要软件被重新编译过就会增长

    对于Android而言:
    • 主版本号变化
    Android 2.x只支持手机等小屏移动设备
    Android 3.x只支持平板和电视等大屏设备
    Android 4.x合并了2.x和3.x,支持多种设备
    • 次版本号变化
    例如Android 2.1, 2.2, 2.3,都是在原有系统上添加很多新功能(比如Android 2.2开始支持往SD卡安装应用),但没有翻天覆地的变化。
    • 维护版本号变化
    例如Android 2.3.1, 2.3.3, 2.3.5等等,都是比以前多修改了一些bugs(我印象中2.3.5着重修复了若干安全漏洞),没有太多功能更新。
    • 构建版本号变化
    可能每天一变或每天数变,所以只对开发团队内部有意义吧。


    作者:陈子腾
    链接:https://www.zhihu.com/question/20969294/answer/16784757
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    展开全文
  • Android软件开发过程中,版本升级常常需要得到软件版本,与服务器作对比后决定是否升级,那么如何获取软件版本呢?有时我们需要获取系统版本已决定加载合适的资源文件,系统版本又如何得到呢?假如我们不想要在...
  • 修改Android版本号信息

    2020-11-29 20:42:49
    修改Android版本号信息修改Android版本号信息一、问题二、分析三、最后的最后 修改Android版本号信息 Android graphics的问题是真的多,只要肉眼可见的问题都算graphics的,无奈。好在最近组里面招了一个大佬L来...
  •  项目中的目标是:每编译一次程序都会自动修改版本号,而不需要手动修改,由于中间debug的次数较多,我打算以每次Build时的当前时间作为版本号。  操作步骤:  1. Android工程目录的assets文件夹下新建一文件,...
  • android studio 修改应用版本号

    千次阅读 2017-05-11 10:10:44
    android studio 里修改apk的版本号 manifest里有,app gradle里也有 当都有时,默认app gradle里的, 所有只需修改,app gradle。 或者直接删掉 app gradle里的 见图: manifest
  • android 8.0系统版本号修改

    千次阅读 2018-05-19 14:30:28
    关于CTA版本的系统属性修改的两个任务,记录下来,仅供android 初级水平参考1、将设置-》关于手机-》版本号中的日期从"20180102Q_v1.0"修改为"20180206Q_v1.0"以保证和该页面中的版本号匹配。...
  • 手机软件完全的版本号定义规则:分三项:..,如 1.0.0。修改规则:主版本号:功能模块有大的变动,比如增加多个模块或者整体架构发生变化。次版本号:和主版本相对而言,次版本号的升级对应的只是局部的变动。但该...
  • Android studio 下 APP版本号修改

    千次阅读 2020-04-10 01:28:04
    【注:学习Android做的笔记,大神勿喷。有不足之处还望不吝赐教。...②如版本号不想放build.gradle(Module:app)中,可如上图注释,再在下图位置重写 android:versionCode="3" android:versionName="3.0" ...
  • android应用版本号修改

    2020-12-13 09:40:23
    如果使用Androidstudio需要在buil.gradle文件中修改
  • Android动态代理实现修改App版本号

    千次阅读 2020-05-19 11:55:48
    通过这个案例,我们可以了解一下动态代理技术,并且能够在不改变版本号的情况下,动态修改版本号进行升级功能的测试,主要实现原理是通过动态代理getPackageInfo()来mock数据。 一、创建PackageManagerHook代理类 ...
  • gradle plugin的变迁以及插件化和模块远程依赖导致项目结构发生了巨大的变化,想要直接找回某个版本的代码成功的运行起来比较困难,不过还好只是修改版本号以及渠道,所以想到了直接使用反编译完之后再回编的方式...
  • 如何修改Android系统的版本号

    千次阅读 2015-07-25 18:41:45
    关于手机里面的Android版本号显示是从下面的这个系统属性读到的 [ro.build.version.release]: [5.1.1] 而build.version.release又是从哪里得到的呢,猜测应该是在系统编译阶段赋值的,结果到build目录下...
  • 1.获取当前版本号PackageManager pm = getPackageManager(); PackageInfo pi = pm.getPackageInfo(getPackageName(), 0);//getPackageName()是你当前类的包名,0代表是获取版本信息 String name = pi.versionName; ...
  • 很多朋友在安装软件的时候都会注意到软件下方一行意义不明的版本号,有的软件会用x.x.x逻辑命名版本号,有的软件则是x.x.x.x,而windows系统的版本号例如1803就更让人摸不到头脑了,那么这些版本号的意义是什么?...
  • 本节教大家如何一键修改手机的系统版本号,借助琢石模拟器强大的参数修改功能,帮我们轻松的完成手机系统版本号修改。如果您的手机还没安装琢石模拟器,请先到官网ZS8K.COM自行下载并按照官网教程完成激活。
  • 使用svn作为软件版本号的好处是一旦软件出现问题可以定位到具体的源代码,android应用的版本是在AndroidManifest.xml中定义的,每次打包发布的前需要手动修改其中的android:versionCode和 android:versionName,然后...
  • Cocos2d-x 3.0 Android修改APK名、更改图标、修改屏幕方向、修改版本号,一些需要注意的问题。
  • android改app版本号

    2019-10-15 20:07:56
    app build.gradle
  • gradle plugin的变迁以及插件化和模块远程依赖导致项目结构发生了巨大的变化,想要直接找回某个版本的代码成功的运行起来比较困难,不过还好只是修改版本号以及渠道,所以想到了直接使用反编译完之后再回编的方式...
  • 软件开发版本号命名规则

    千次阅读 2019-02-21 00:22:20
    版本号.分支版本号.小版本号-里程碑版本 总版本号 的变动一般表示框架的变动 分支版本号一般表示增加了一些功能 小版本号是在分支版本上面进bug的修复 里程碑:由刚开始的SNAPSHOT–&gt;alpha(内部测试版本)...
  • Android apk反编译、修改、重新打前名的详细流程介绍图文教程超详细
  • 软件版本号命名规则

    千次阅读 2018-03-05 19:52:47
    软件版本号命名规则转http://www.newpm.net/pm/77版本号用于区别软件不同的迭代版本,如何命名,应该说是每个公司都有自己的习惯。但是最好还是有一定的规律比较好,这样也能便于其他人了解你的软件更新历程,也不...
  • 第一种方法:第二种方法: 打开app中的build.gradle修改
  • RK3399的板子,系统功能一直在修改,系统版本号如何修改,下面是比较土的办法,后续会更新最新的方法: 1、镜像名称的修改。 我的系统类型是rk3399_firefly_aiojd4_mipi_box,修改路径下的文件device/rockchip/rk...
  • 通过gradle命令动态修改应用版本号和版本名称 在Android项目的build.gradle文件中android中的versionCode与versionName android { compileSdkVersion 29 buildToolsVersion "29.0.2" defaultConfig { ...
  • Android Studio中生成APK文件方法 apk文件就是一个包,打包就是把代码生成apk文件,别人通过apk包进行安装。 打包分debug版和release包,release版的apk会比debug版的小, release版可以防止别人反编译后重新打包...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 34,794
精华内容 13,917
关键字:

安卓软件改版本号