Ⅰ android中用ANT打包如何將內容復制到AndroidManifest文件中
看這么的行不行。分析下
首先。android是支持自動構建的對吧。也就有一套邏輯自持把你的工程目錄下的那些所有文件打包成apk文件。就是sdk\tools\ant目錄下那個build.xml的作用。他有一個主文件是公共的一般只是引入即可。還有作為輔助的ant.properties 保存本地信息內容的
其中這個主文件他是通過路徑的方法找到項目的AndroidManifest文件的
名字的引用(build.xml中的一段)
<property name="manifest.file" value="AndroidManifest.xml" />
目標的指向
<!-- get the project manifest package -->
<xpath input="${manifest.abs.file}"
expression="/manifest/@package" output="project.app.package" />
這樣就能知道ant的工作原理和步驟。
-》定位項目跟目錄。-》找到AndroidManifest文件等等。-》根據自己的邏輯去組織編譯代碼還有打包混淆等等操作。
其中可以從「找到AndroidManifest文件」這一步出手。想辦法控制這個引用是你能分配的。以任務的形式來管理。
其中一個方法是,准備n個版本的AndroidManifest文件 然後通過target任務來決定某次編譯具體使用你做的N個中的哪一個。這是簡潔算是取巧方法
另外一個方法是。你把所有的ant編譯過程通過調試(xml代碼也可以調試,斷點跟蹤)來弄明白每個任務的具體含義。然後通過改寫的手段來diy你自己的build 這是最徹底最有知識量的方法。也就不用那麼多n版本的AndroidManifest,通過replace某個欄位值即可
Ⅱ 如何混淆android工程打成的jar包
混淆android工程打成的jar包方式如下:
從SDK2.3開始、在android-sdk-windows ools下面多了一個proguard文件夾讓proguard.cfg起作用的做法很簡單,就是在eclipse自動生成的default.properties文件中加上一句「proguard.config=proguard.cfg」就可以,如下圖:
Ⅲ android混淆打包 功能不能用
ProGuard來進行混淆打包,大大的優化Apk包的大小。但是注意ProGuard對文件路徑的名名很有講究,不支持括弧,也不支持空格。在混淆過後,可以在工程目錄的proguard中的mapping.txt看到混淆後的類名,方法名,變數名和混淆前的類名,方法名,變數名。
在使用Eclipse新建一個工程,都會在工程目錄下生產配置project.properties和proguard-project.tx。
#
To
enable
ProGuard
to
shrink
and
obfuscate
your
code,
uncomment
this
(available
properties:
sdk.dir,
user.home):
#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
#
Project
target.
target=android-10
project.properties用於配置Android工程的一些屬性,#號的話表示當前行是注釋,這里的proguard.config就用於指定ProGuard的混淆配置文件,並對使用release方式打包應用程序時開啟代碼混淆功能。對於是否是使用release方式打包,和AndroidManifest.xml中application的android:debuggable屬性有很多關系。如果該值為android:debuggable="true",那麼最終就是debug方式打包。最明智的方式就是在AndroidManifest.xml並不顯示的指定它,而是是打包工具在打包時來決定它最終的值。對於ant就是ant
release或ant
debug。而對於直接在Eclipse中使用run
或debgu來打包的話就是debug,使用export的話就是release.
proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
這里的話指定了混淆的基本配置文件proguard-android.txt,和混淆的個性化配置文件proguard-project.txt。
Ⅳ android ant混淆編譯打包生成jar文件,如何將jni生成的lib**.so庫文件同時打包
在混淆配置文件中添加這句
-keepclasseswithmembernames class * {
native <methods>;
}
Ⅳ Android怎麼把一個現有工程打包成sdk
方法一
使用eclipse導出jar包:我們知道一個java項目是可以用eclipse導出jar包的,安卓工程也一樣,只要按普通的方法export就可以了。不過,export出來的包是沒有混淆過的,如果你要混淆,還需要單獨對你的jar包執行一次proguard程序,可參考proguard使用指南。
方法二
使用腳本打包:我個人比較喜歡該方法,因為android工程項目並不是只有JAVA代碼,有的資源也需要提供出來,而使腳本可以更加定製化一些。
android的SDK默認提供了一個ant打包的腳本,具體使用方法,可參考之前的BLOG,使用ant打包APK及依賴包最佳解決辦法
我們可以看出,打包,最終調用的其實是android sdk下的ant腳本,既然安卓已經幫我們寫好了ant腳本,我們就好好利用。
使用上面的BLOG中介紹的方法,先在工程目錄中生成你的build.xml,然後自己寫一個target
<target name="sdk"
depends="-set-release-mode, -release-obfuscation-check, -compile, -post-compile, -obfuscate">
</target>
這段target代碼,就是只執行到了混淆的腳本。然後我們在build.xml中選擇右鍵,run as, 第二個ant Build,然後選擇要執行的target為我們加上的sdk。
等執行完成後,就會在project/bin/proguard/obfuscated.jar找到你所要的jar包。
Ⅵ android混淆腳本 怎麼去掉logger包
一、理論知識
ProGuard是一款免費的Java類文件壓縮器、優化器和混淆器。它能發現並刪除無用類、欄位(field)、方法和屬性值(attribute)。它也能優化位元組碼並刪除無用的指令。最後,它使用簡單無意義的名字來重命名你的類名、欄位名和方法名。經過以上操作的jar文件會變得更小,並很難進行逆向工程。
二、基本使用
在Android應用程序也可以使用ProGuard來進行混洗打包,大大的優化Apk包的大小。但是注意ProGuard對文件路徑的名名很有講究,不支持括弧,也不支持空格。在混淆過後,可以在工程目錄的proguard中的mapping.txt看到混淆後的類名,方法名,變數名和混淆前的類名,方法名,變數名。
在使用Eclipse或Ant打包應用程序時,都是使用Android工程目錄的project.properties文件來指定配置。關於Android中如何使用ant打包請參考《Android中使用Ant編譯打包》
在使用Eclipse新建一個工程,都會在工程目錄下生產配置project.properties和proguard-project.tx。
文件如下所示:
例1
# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
# Project target.
target=android-10
Ⅶ android 加入library如何混淆
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引入,那這些項目的一些類也不能混淆。
2.另外還有其他一些經驗:
-optimizationpasses 5壓縮等級
-dontusemixedcaseclassnames 【混淆時不會產生形形色色的類名 】
- 【指定不去忽略非公共的庫類。 】
-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 *;
}
Ⅷ 如何使用Android Studio打包混淆的Jar
可以嘗試把"-libraryjars"都去掉,因為gradle的Proguard默認會去libs裡面添加庫依賴。
所以導致類重復了。
Eclipse遷移到Android studio步驟如下:
一、從Eclipse中導出:
1、將你的ADT插件版本升級到22.0以上。
2、在Eclipse中,選擇File-->Export。
3、在彈出的導出窗口中,打開Android的文件夾,選擇「Generate Gradle Build Files」。
4、選中你想要導入到Android Studio中的項目,Finish。
注意:導出的項目將會和原來的項目在同一目錄,覆蓋原來的同時,會新增一個叫build.gradle的文件,導入Android Studio時將首先讀取這個文件。
二、導入到Android Studio:
1、在Android Studio 中,首先關掉你當前的打開的項目。
2、在歡迎界面,點擊Import Project(註:也是可以直接在菜單選擇Import project的)。
3、選中你在Eclipse中導出的項目,展開目錄,點擊build.gradle文件,然後OK。
4、在之後的彈出對話框中,會要求你選擇Gradle的配置,選中Use gradle wrapper.(註:也可以自定義你本機裝的Gradle)。
注意:如果沒有Grade build文件,也是可以將普通的安卓項目導入到Android Studio中,它會用現有的Ant build.但為了更好地使用之後的功能和充分使用構建變數,還是強烈地建議先從ADT插件中生成Gradle文件再導入Android Studio。
Ⅸ 如何混淆android代碼以及注意事項
2.3SDK的兩個新特點:
1.剛安裝上2.3時,查看sdk目錄,發現在 ools下新增了一文件夾「proguard」,如下圖,我就在想是不是Google終於官方對proguard考慮進去了。理論上,對java的混淆都是可以的,但關鍵在於如何編寫proguard的混淆腳本。
注意要點:
1.混淆以後的包會比混淆前的包小一點,一定要注意這點.
如果混淆不成功,請在第2步,將proguard.config=proguard.cfg修改為proguard.config=E:Mobile_DevelopGoogle_AndroidpublicGoldenBeach_newproguard.cfg這種類似的用絕對路徑,請注意絕對路徑中的文件夾名不能含有空格,如果有空格請替換為"_".
2.android在用proguard混淆時,一般情況下使用系統自帶的配置文件就可以保持大部分外部需要引用的類,比如Activity,view擴展等等,但是有些情況下一些引入的外部lib,如果被混淆也會出現各種各樣的問題,如果不想混淆這些包,就要加上
-keep class packagename.** {*;}
這樣就能完整保持原有class了