Android中用Package 这个类来代表一个apk。
final Package pkg = parseBaseApk(baseApk, assets, flags);
我们Package  是由parseBaseApk 来赋值的,我们看看parseBaseApk是如何得到version code
可以看到1389行的实现com.android.internal.R.styleable.AndroidManifest_versionCode
原来version code是R文件中的一个常量


        String[] outError) throws XmlPullParserException, IOException {
1356        final boolean trustedOverlay = (flags & PARSE_TRUSTED_OVERLAY) != 0;
1357
1358        AttributeSet attrs = parser;
1359
1360        mParseInstrumentationArgs = null;
1361        mParseActivityArgs = null;
1362        mParseServiceArgs = null;
1363        mParseProviderArgs = null;
1364
1365        final String pkgName;
1366        final String splitName;
1367        try {
1368            Pair packageSplit = parsePackageSplitNames(parser, attrs, flags);
1369            pkgName = packageSplit.first;
1370            splitName = packageSplit.second;
1371        } catch (PackageParserException e) {
1372            mParseError = PackageManager.INSTALL_PARSE_FAILED_BAD_PACKAGE_NAME;
1373            return null;
1374        }
1375
1376        int type;
1377
1378        if (!TextUtils.isEmpty(splitName)) {
1379            outError[0] = "Expected base APK, but found split " + splitName;
1380            mParseError = PackageManager.INSTALL_PARSE_FAILED_BAD_PACKAGE_NAME;
1381            return null;
1382        }
1383
1384        final Package pkg = new Package(pkgName);
1385        boolean foundApp = false;
1386
1387        TypedArray sa = res.obtainAttributes(attrs,
1388                com.android.internal.R.styleable.AndroidManifest);
1389        pkg.mVersionCode = pkg.applicationInfo.versionCode = sa.getInteger(
1390                com.android.internal.R.styleable.AndroidManifest_versionCode, 0);
1391        pkg.baseRevisionCode = sa.getInteger(
1392                com.android.internal.R.styleable.AndroidManifest_revisionCode, 0);
1393        pkg.mVersionName = sa.getNonConfigurationString(
1394                com.android.internal.R.styleable.AndroidManifest_versionName, 0);
1395        if (pkg.mVersionName != null) {
1396            pkg.mVersionName = pkg.mVersionName.intern();
1397        }
}

更多相关文章

  1. QT 环境的 Android(安卓)配置和编译
  2. android bluetooth----bluetoothClass.Service
  3. Android(安卓)更改键盘Enter键文字
  4. Android(安卓)Audio代码分析15 - testPlaybackHeadPositionAfter
  5. android studio错误: 常量字符串过长
  6. Android(安卓)Audio代码分析20 - queryEffects函数
  7. 【Android(安卓)开发教程】保存到内部存储设备
  8. [Android] Smali基本语法
  9. android listView EditText获取焦点

随机推荐

  1. Failed to load libGL.so in android
  2. android 制作输入法
  3. Android Studio使用总结
  4. android 应用在启动后进行全局的的初始化
  5. Android实现签名涂鸦手写板
  6. android webview 设置
  7. AndroidStudio打包apk出现的问题 `Error:
  8. react-native开发实例之替换默认logo——
  9. textview scroll
  10. Android Studio如何引用外部Library工程