android工程会看到项目有
project.properties 这个文件就是用来开启项目是否混淆
proguard-project.txt 这个文件就是记录了代码混淆的属性
要开启混淆,只需要将project.properties 文件中的
# proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt”的“#”去掉就可以了。
关于proguard-project.tx 混淆的属性:
通常情况下,我们只需要作以上几步 *** 作就能满足需求,如果有一些特殊要求,某些类或者jar包不需要混淆,这个时候就需要修改proguard-project.txt文件了。以下是网上搜索的网友分享的经验:
1.在proguard-project.txt文件中添加不需要混淆的类和第三方的jar包
这个是保持自己包中不需要混淆的类,如果有些类调用了jni也不需要混淆,不然会出错。还有如果项目中有其他项目作为library引入,那这些项目的一些类也不能混淆。
这个是保持项目中的第三方jar不混淆
另外加上上面几句话,不然会在控制台中报warning警告
2.另外还有其他一些经验:
-optimizationpasses 5 压缩等级
-dontusemixedcaseclassnames 【混淆时不会产生形形色色的类名 】
-dontskipnonpubliclibraryclasses 【指定不去忽略非公共的库类。 】
-dontpreverify 【不预校验】
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* 【优化】
-keep public class * extends android.app.Activity【不进行混淆保持原样】
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService
-keep public abstract interface com.asqw.android.Listener{
public protected <methods> 【所有方法不进行混淆】
}
-keep public class com.asqw.android{
public void Start(java.lang.String)【对该方法不进行混淆】
}
-keepclasseswithmembernames class * { 【保护指定的类和类的成员的名称,如果所有指定的类成员出席(在压缩步骤之后)】
native <methods>
}
-keepclasseswithmembers class * { 【保护指定的类和类的成员,但条件是所有指定的类和类成员是要存在。】
public <init>(android.content.Context, android.util.AttributeSet)
}
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet, int)
}
-keepclassmembers class * extends android.app.Activity {【保护指定类的成员,如果此类受到保护他们会保护的更好 】
public void *(android.view.View)
}
-keepclassmembers enum * {
public static **[] values()
public static ** valueOf(java.lang.String)
}
-keep class * implements android.os.Parcelable {【保护指定的类文件和类的成员】
public static final android.os.Parcelable$Creator *
}
一、APK扩展文件基本知识Android Market (Google Play Store)中每个APK文件的最大限制是50MB。如果您的程序中包含大量的数据文件,以前您只能把这些数据文件放到自己的服务器上,当用户启动程序的时候让用户去下载。现在这些数据文件可以直接上传到Android Market了。在新的Market控制台上传App的时候,可以添加扩展文件了。
下面就来看看什么时候该使用扩展文件,该如何使用?
每个APK可以有2个扩展文件,每个文件最大限制是2GB。为了减少用户的带宽消耗,最好使用压缩格式文件吧。 这两扩展文件具有不同的用途: 第一个被称为 main (主)扩展文件,该扩展文件保护您程序中需要用到的附加数据; 第二个被称为 patch 扩展(修补)文件,该文件是可选的,并且应该只包含一些不同版本的补丁数据。
当然您可以按照您需要的方式来使用这两个扩展文件,不过Android官方还是推荐把这两个文件的功能分开。main扩展文件包含核心数据,并且尽量不随程序版本的升级去修改;而patch扩展文件可以随程序版本的升级做修改。为了帮助大家理解具体的含义,我们使用一个地图App来解释下:比如 Google 地图程序需要包含一个离线地图数据包,这样可以方便用户离线查看地图,在程序发布的时候,可以把现有的离线数据包作为main扩展文件上传到Market。 然后过了半年Google地图更新了,新添加了一些刚刚修好的高速公路、新建立的商场 等信息,可以把这些新增的信息作为patch扩展文件使用。 这样Google 地图 1.0版本对应一个main扩展文件;而Google地图1.1版本对应一个main扩展文件和一个1.1版本的patch扩展文件;Google地图1.2版本对应一个main扩展文件和一个1.2版本的patch扩展文件。 这里面的main扩展文件是同一个文件而patch扩文件是随版本变化的。这样的好处就是当程序升级的时候, 用户不用重新下载main扩展文件了,只需要下载少量的新增文件即可,节省用户流量。
二、扩展文件的命名格式
扩展文件可以使用任何文件格式(ZIP, PDF, MP4, 等)。不管任何文件格式Android都认为他们是obb(opaque binary blobs)文件,并且会根据如下文件命名规则来重命名扩展文件:
[main|patch].<expansion-version>.<package-name>.obb
main or patch指定文件是main扩展文件还是patch扩展文件,每个APK只能有一个main扩展文件和一个patch扩展文件。
<expansion-version> 和第一次上传该扩展文件的APK文件的android:versionCode一致。后续版本的APK可以重用前面上传的扩展文件。 您程序的Java包名
<package-name> 例如程序的版本为5,程序的包名为org.goodev.expansion.downloader。则上传的main扩展文件会被重命名为:main.5.org.goodev.expansion.downloader.obb
三、扩展文件的保存位置
当Android Market下载程序的扩展文件的时候会保存到系统的共享存储区。为了确保程序正常运行,您不能删除、移动或者重命名扩展文件。在某些设备上Market无法自动下载该扩展文件,那么您应该在程序启动的时候去下载该文件并且保存到同样的位置。 扩展文件保存位置如下: <shared-storage>/Android/obb/<package-name>/
<shared-storage>代表共享文件的目录路径,通过函数getExternalStorageDirectory()获取; <package-name>APK的Java包名。对于每个App而言,该目录下最多只能包含2个扩展文件。一个是main扩展文件另外一个是patch扩展文件。当更新程序的时候,如果有新的扩展文件则新文件会覆盖旧的扩展文件。
如果您需要解压缩扩展文件来使用,请注意不要删除该.obb文件,并且也不要把文件解压缩到该目录。您应该把解压缩后的文件保存到getExternalFilesDir()返回的目录下面。如果有可能的话,最好使用程序能直接读取的文件格式而不用再次解压缩文件了。Android开发团队提供了一个项目( APK Expansion Zip Library)可以直接读取ZIP文件中的内容而不用解压缩该文件. 需要注意的是:保存在系统共享存储区的文件,用户和其他APP也可以访问。
四、扩展文件的规则和限制
1.每个扩展文件最大为2GB
2.用户必需要从Android Market获取您的程序才能自动从Market中下载扩展文件
3.当在您的程序中下载扩展文件的时候,Market每次都会为每个文件生成一个唯一的下载URL,该URL会在短期内失效。
4.当你上传一个新的APK的时候,可以选择使用以前上传的扩展文件
5.如果您使用多个APK文件来适配不同的设备,并且也希望使用多个扩展文件。为了获取一个唯一的versionCode和不同的Market filter, 您需要分别为每个设备上传不同的APK文件。
6. 不能通过更新扩展文件来发布一个新的版本。
7. 不要在obb/文件夹中保存其他数据
8.不要删除或者重命名.obb文件
五、APK扩展文件使用实例
要在App中使用扩展文件,需要两个附加的Android库项目:
1)Google Market Licensing package
2)Google Market APK Expansion Library package
可以通过Android SDK Manager来下载,也可以直接通过如下链接下载:
https://dl-ssl.google.com/android/repository/market_licensing-r02.zip
https://dl-ssl.google.com/android/repository/market_apk_expansion-r01.zip
下载完成后使用market_licensing-r02.zip文件中的目录google_market_licensing\library来创建一个库项目
然后使用market_apk_expansion-r01.zip中的google_market_apk_expansion\downloader_library来创建另外一个库项目。
同时为了简化对ZIP格式扩展文件的处理,在market_apk_expansion-r01.zip文件中还包含了一个对ZIP文件处理的库项目:google_market_apk_expansion\zip_file。 如果您使用的扩展文件格式是ZIP,那么也可以创建这个库项目。
右键工程, Build path, java build path,选择libraries 在右边的按钮中点击“Add Library” 选择“User library”,点击“下一步” 点击“User librarys”按钮 在出现的界面中点击“New..”按钮 在d出的界面中随便起一个名字,点击“确定” 点击“Add jars”按钮选择第三方jar包,点击“确定”完成 *** 作。 这样的话该jar包会被一起打包到apk中,问题也就解决了!欢迎分享,转载请注明来源:内存溢出
评论列表(0条)