最近在研究安卓的OTA rom扫腺,找到一個(gè)開源的項(xiàng)目https://github.com/MatthewBooth/OTAUpdates 其中用到了bypass。
bypass:Skip the HTML, Bypass takes markdown and renders it directly on Android and iOS.
使用Android Studio 1.3.2導(dǎo)入項(xiàng)目編譯時(shí)出錯(cuò):Error:(3, 31) 錯(cuò)誤: 程序包in.uncod.android.bypass不存在。
這個(gè)包在src_bypass目錄下斜脂,AS并沒有導(dǎo)入這個(gè)目錄。bypass需要用到NDK來(lái)編譯。項(xiàng)目的Building說(shuō)明是針對(duì)linux下Eclipse的盛嘿,我用的是Window下AS,剛學(xué)Android饱苟,不知道怎么配置孩擂。
偷懶找到一個(gè)使用的AS的bypass項(xiàng)目:https://github.com/actorapp/bypass 導(dǎo)入項(xiàng)目后,出現(xiàn)以下問題:
1.未設(shè)置NDK的路徑
Error:Execution failed for task ':library:ndkBuild'. > A problem occurred starting process 'command 'null/ndk-build''
配置NDK的的安裝路徑即可箱熬。
1)設(shè)置環(huán)境變量:新增ANDROID_NDK_HOME
鍵值為Android NDK安裝目錄类垦,在PATH末尾增加;%ANDROID_NDK_HOME%
狈邑。
或者2)在AS的project structure設(shè)置,如下圖:
2. 調(diào)用的ndk-build命令不對(duì)
Error:Execution failed for task ':library:ndkBuild'.> A problem occurred starting process 'command 'D:\androidDev\android-ndk-r10e/ndk-build''
在stackoverflow上找到原因蚤认,build.gradle文件中
taskndkBuild(type: Exec,description:'Compile JNI source via NDK') {
defndkDir =project.plugins.findPlugin('com.android.library').sdkHandler.ndkFolder
workingDir"$projectDir/src/main/jni"
commandLine"$ndkDir/ndk-build"
}
commandLine"$ndkDir/ndk-build"這一行windows下應(yīng)該用ndk-build.cmd
3. 找不到boost庫(kù)文件
項(xiàng)目Readme中有說(shuō)明
Manual Build
Make sureBYPASS_INCLUDE_PATH to its parent directory.
設(shè)置環(huán)境變量:新增BYPASS_INCLUDE_PATH
鍵值為boost的安裝目錄米苹,在PATH末尾增加;%BYPASS_INCLUDE_PATH%
。
折騰好久砰琢,終于編譯通過(guò)蘸嘶!
Log開關(guān)的使用
代碼中有一段Benchmark耗時(shí)的打印輸出
public class BenchmarkActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TextView text = (TextView) findViewById(R.id.demoText);
TimingLogger timings = new TimingLogger("Bypass", "onCreate");
String readme = loadFile();
timings.addSplit("read raw");
Bypass bypass = new Bypass(BenchmarkActivity.this);
timings.addSplit("instantiated Bypass");
CharSequence string = bypass.markdownToSpannable(readme);
timings.addSplit("convert to spannable");
timings.dumpToLog();
text.setText(string);
//Allows link clicking
text.setMovementMethod(LinkMovementMethod.getInstance());
}
......
}
logcat中卻看不到。調(diào)試跟蹤發(fā)現(xiàn)這個(gè)打印是通過(guò)Log.isLoggable來(lái)控制開關(guān)陪汽。在adb shell中設(shè)置屬性setprop log.tag.Bypass VERBOSE
打開打印輸出或者寫在local.properties中训唱,就可以看到打印輸出了。
09-07 09:24:12.111 25845-25845/in.uncod.android.bypass.test D/Bypass﹕ onCreate: begin
09-07 09:24:12.111 25845-25845/in.uncod.android.bypass.test D/Bypass﹕ onCreate: 1 ms, read raw
09-07 09:24:12.111 25845-25845/in.uncod.android.bypass.test D/Bypass﹕ onCreate: 29 ms, instantiated Bypass
09-07 09:24:12.111 25845-25845/in.uncod.android.bypass.test D/Bypass﹕ onCreate: 11 ms, convert to spannable
09-07 09:24:12.111 25845-25845/in.uncod.android.bypass.test D/Bypass﹕ onCreate: end, 41 ms